mysql筆記集錦3
Day3列類型與建表
1 理解
(1)知識點:列類型;
a:怎麼建表:以在A4紙上建表爲例,例子略;
b:分析:我們只要把表頭建好了,這張表就算是建好了;
其實建表的過程,就是一個畫表頭的過程;
即:建表的過程就是一個聲明字段的過程;
(2)建表和列類型的關係?
a:分析:A4紙的大小是有限的,那麼每列的長度應該留多 寬呢?
b:因此:對應的,空間有限,我們在建列時,我們想到的 就是能夠容納放置的內容,但是又不能浪費;
c:存儲同樣的數據,不容的列類型,所佔據的空間和效率 是不一樣的,這就是我們建表前要列類型的意義;
(3)重點:學習列類型的存儲範圍與佔據的字節關係;
2. 列類型學習
Mysql三大列類型:
(1)數值型:
a 整型
Tinyint
佔據空間:一個字節;存儲範圍:-12 8~127,0-255;
聲明tinyint怎麼樣表示有符號和無符號?
int系列的聲明時的參數:
(M)unsigned zerofill;
//#分析M參數
//#zerofill zero是零,fill是填充,代表0;
M必須和zerofill配合使用纔有意義;
給學員添加一個學號:
1:學號不能爲負;
2:學號一般位數相同,即使不同,如:00012,11123;
3:即使不夠位數,用0填充;
#例子:
alter table class
add snum smallint<5> zerofill not null
default 0;
//snum統一補0,而且補到5位;
#M表示補0的寬度,和zerofill配合使用纔有意義;
#unsigned zerofill :觀察snum類型,可知zerofill則同時必是 unsigned類型;
#練習tinyint的參數並驗證字節與範圍的關係:
create table class(
sname varchar(20) not null default '',
age tinyint not null default 0//age is tinyint;
)engine myisam charset utf8;
insert into class(sname,age)
values
('coo',111);//Query ok;
('aaa',128);//out of range;
#即:不加特殊說明,默認是有符號的;
#加unsigned表示無符號,可以影響存儲的範圍;
alter table class //修改表,添加score爲unsigned;
add score tinyint unsigned not null default 0;
# 測試範圍:
insert into class(sname,score)
values
('jj',200);//query ok;
('hh',-1);//out of range;
*加列類型加unsigned表明是無符號類型;
#爲其插入數據,age到底是-128到127,還是0-255呢?
二進制補碼問題:
負數 = 絕對值 - 128;
Smallint
Mediuint
int
bigint
b 小數(浮點型/定點型)
#浮點數在計算機裏表示是比較複雜的;
a float(M,D)
小數點的左邊和小數點的右邊?即範圍;
#12.23;13.255;
#M代表“標度”---》代表小數的總位數;
D代表“精度”---》代表小數點右邊的位數(小數位);
代碼示例:
create table salary(
sname varchar(20) not null default '',
gongzi float(6,2)
)engine myisam charset utf8;
#添加獎金列:
alter table salary
add
bonus float(5,2) unsigned not null default 0;
#浮點數佔多大的空間呢:
//float能存儲10^38,10^-38; 如果M<=24,佔4個字節,否則佔8個字節;
#用來表示數據中的小數出來float--浮點,
還有一種叫定點,定點就是把整數部分和小數部分分開存儲的,比float精確;decimal;
b decimal(M,D)
代碼示例:
create table account(
id int not null default 0,
acc1 float(9,2) not null default 0.00,
acc2 decimal(9,2) not null default 0.00
)engine myisam charset utf8;
示例:
insert into account
values
(1,1234567.23,1234567.23);
#通過上例可以看出float有損精度,decimal無損精度;
//decimal:如果像賬戶這樣的敏感字段,建議用decimal;
字符串型:
char,varchar,text,blob;
char(4):定長字符串;
varchar:變長字符串類型;
#姓名 char(6)
za
ji
ii
#查找記錄時,如果都是定長的話,完全可以通過行數和行的長度計算 出來文件指針的偏移量;
對於定長N,不論夠不夠指定長度,實際都佔據N個長度;
如果不夠就用空格在尾部補齊;
varchar(100),也是可以存儲0-100個字符;
#“za”開始出,請把za取出來,往後去取幾個字符呢??
/// 對於varchar(M),不用空格補齊,但列內容前,實際是要加上(1-2)個字節來標記內容長度;
示例代碼:
create table test(
va char(6) not null default '',
vs varchar(6) not null default ''
)engine myisam charset utf8;
//
insert into test
values
('aa ' ,'aa '); //空格
//
#concat 連接字符串的函數
select concat(va,'!'),concat(vs,'!')
from test;
//如果不夠的時候就用空格補齊,取出時再把右側空格刪除(如果內容用空格,將會被清除);
//如果右側有空格,取出的時候就會有缺失;
##兩者限制的是字符,不是字節;
注意事項:
// char(2) charset utf8,M指能存兩個字符,如“獎金”;
//錯誤認識:既然是字符,6個utf8中文,即是12個字節,可以存12個英文字母?
##不對,也只是能存六個字母而已;
text:文本類型,一般用來儲存文章內容,新聞內容等;聲明text列時,不必給默認值;
示例代碼:
create table test2(
arti text not null default ''
);//error
arti text);//Ok
blob:是進制類型,是用來存儲圖像,音頻等二進制信息;二進制,0-255都有可能出現,Blob在於防止因爲字符集的問題,導致信息丟失;
比如:一張圖片有0xFF字節,這個在ascii字符集認爲非法,在入庫的時候被過濾了;
示例代碼:
alter table test2
add
img blob;//添加列img,類型是blob;
//
insert into test2
values('加','是');
1 理解
(1)知識點:列類型;
a:怎麼建表:以在A4紙上建表爲例,例子略;
b:分析:我們只要把表頭建好了,這張表就算是建好了;
其實建表的過程,就是一個畫表頭的過程;
即:建表的過程就是一個聲明字段的過程;
(2)建表和列類型的關係?
a:分析:A4紙的大小是有限的,那麼每列的長度應該留多 寬呢?
b:因此:對應的,空間有限,我們在建列時,我們想到的 就是能夠容納放置的內容,但是又不能浪費;
c:存儲同樣的數據,不容的列類型,所佔據的空間和效率 是不一樣的,這就是我們建表前要列類型的意義;
(3)重點:學習列類型的存儲範圍與佔據的字節關係;
2. 列類型學習
Mysql三大列類型:
(1)數值型:
a 整型
Tinyint
佔據空間:一個字節;存儲範圍:-12 8~127,0-255;
聲明tinyint怎麼樣表示有符號和無符號?
int系列的聲明時的參數:
(M)unsigned zerofill;
//#分析M參數
//#zerofill zero是零,fill是填充,代表0;
M必須和zerofill配合使用纔有意義;
給學員添加一個學號:
1:學號不能爲負;
2:學號一般位數相同,即使不同,如:00012,11123;
3:即使不夠位數,用0填充;
#例子:
alter table class
add snum smallint<5> zerofill not null
default 0;
//snum統一補0,而且補到5位;
#M表示補0的寬度,和zerofill配合使用纔有意義;
#unsigned zerofill :觀察snum類型,可知zerofill則同時必是 unsigned類型;
#練習tinyint的參數並驗證字節與範圍的關係:
create table class(
sname varchar(20) not null default '',
age tinyint not null default 0//age is tinyint;
)engine myisam charset utf8;
insert into class(sname,age)
values
('coo',111);//Query ok;
('aaa',128);//out of range;
#即:不加特殊說明,默認是有符號的;
#加unsigned表示無符號,可以影響存儲的範圍;
alter table class //修改表,添加score爲unsigned;
add score tinyint unsigned not null default 0;
# 測試範圍:
insert into class(sname,score)
values
('jj',200);//query ok;
('hh',-1);//out of range;
*加列類型加unsigned表明是無符號類型;
#爲其插入數據,age到底是-128到127,還是0-255呢?
二進制補碼問題:
負數 = 絕對值 - 128;
Smallint
Mediuint
int
bigint
b 小數(浮點型/定點型)
#浮點數在計算機裏表示是比較複雜的;
a float(M,D)
小數點的左邊和小數點的右邊?即範圍;
#12.23;13.255;
#M代表“標度”---》代表小數的總位數;
D代表“精度”---》代表小數點右邊的位數(小數位);
代碼示例:
create table salary(
sname varchar(20) not null default '',
gongzi float(6,2)
)engine myisam charset utf8;
#添加獎金列:
alter table salary
add
bonus float(5,2) unsigned not null default 0;
#浮點數佔多大的空間呢:
//float能存儲10^38,10^-38; 如果M<=24,佔4個字節,否則佔8個字節;
#用來表示數據中的小數出來float--浮點,
還有一種叫定點,定點就是把整數部分和小數部分分開存儲的,比float精確;decimal;
b decimal(M,D)
代碼示例:
create table account(
id int not null default 0,
acc1 float(9,2) not null default 0.00,
acc2 decimal(9,2) not null default 0.00
)engine myisam charset utf8;
示例:
insert into account
values
(1,1234567.23,1234567.23);
#通過上例可以看出float有損精度,decimal無損精度;
//decimal:如果像賬戶這樣的敏感字段,建議用decimal;
字符串型:
char,varchar,text,blob;
char(4):定長字符串;
varchar:變長字符串類型;
#姓名 char(6)
za
ji
ii
#查找記錄時,如果都是定長的話,完全可以通過行數和行的長度計算 出來文件指針的偏移量;
對於定長N,不論夠不夠指定長度,實際都佔據N個長度;
如果不夠就用空格在尾部補齊;
varchar(100),也是可以存儲0-100個字符;
#“za”開始出,請把za取出來,往後去取幾個字符呢??
/// 對於varchar(M),不用空格補齊,但列內容前,實際是要加上(1-2)個字節來標記內容長度;
示例代碼:
create table test(
va char(6) not null default '',
vs varchar(6) not null default ''
)engine myisam charset utf8;
//
insert into test
values
('aa ' ,'aa '); //空格
//
#concat 連接字符串的函數
select concat(va,'!'),concat(vs,'!')
from test;
//如果不夠的時候就用空格補齊,取出時再把右側空格刪除(如果內容用空格,將會被清除);
//如果右側有空格,取出的時候就會有缺失;
##兩者限制的是字符,不是字節;
注意事項:
// char(2) charset utf8,M指能存兩個字符,如“獎金”;
//錯誤認識:既然是字符,6個utf8中文,即是12個字節,可以存12個英文字母?
##不對,也只是能存六個字母而已;
text:文本類型,一般用來儲存文章內容,新聞內容等;聲明text列時,不必給默認值;
示例代碼:
create table test2(
arti text not null default ''
);//error
arti text);//Ok
blob:是進制類型,是用來存儲圖像,音頻等二進制信息;二進制,0-255都有可能出現,Blob在於防止因爲字符集的問題,導致信息丟失;
比如:一張圖片有0xFF字節,這個在ascii字符集認爲非法,在入庫的時候被過濾了;
示例代碼:
alter table test2
add
img blob;//添加列img,類型是blob;
//
insert into test2
values('加','是');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.