create table t2(id int(5) unsigned zerofill);mysql
注意:sql
①int後面的5表示的是顯示寬度(就是你select * from t2;時看到的數字最大長度爲5),而不是數據庫存儲時的寬度,通常在建立表格時整形後都不寫數字就寫int就完事了.數據庫
②unsigned表示這個字段爲無符號整數對照下面的表,無符號與有符號數字範圍不一樣,不寫unsigned就是默認有符號整數.spa
③zerofill就是你顯示時,若是寬度比你規範的5要短,數字前面就用0來填充,保證位數夠5位3d
④當你輸入的值超過該字段範圍時(有符號或者無符號的數字範圍),他會以最大值(輸入的值比範圍大)或者最小值(輸入的值比範圍小)來代替你輸入的數字來存儲,而且,此時你規定的顯示寬度失效.blog
⑤當你寫int時,此時是有符號,默認顯示寬度是11,即int(11),寫成int unsigned時是無符號,此時默認顯示寬度是10,根據下圖對照有無符號時最大數字長度.ip
⑥除整形之外全部寬度都是數據庫的存儲寬度ci
⑦整型包括tinyint,smallint,mediumint,int,inteager,bigint字符串
注意:table
①浮點型包括float,double,decimal
float:
create table t2(id float(M,D) unsigned zerofill);
M是浮點數總寬度(除小數點之外,數字總個數),M最大值爲255
D是小數點後數字個數,D最大值爲30
若是D最長了,那麼整數部分最長爲225個數字
double同float
decimal:
M最大爲65,
D最大爲30,
小數精度:decimal>double(15位小數左右)>float(7位小數左右)
t8:float
t9:double
t10:decimal
decimal底層是用字符串來存儲,因此精度高
year,date,time,datetime,timestamp
datetime與timestamp區別:
①範圍不一樣:datetime是1001-9999,timestamp是1970-2038
②大小不一樣:datetime佔8個字節,timestamp佔4個字節
4.字符類型:
char:定長(固定長度存儲)存取速度快,可是佔地方,用的較多,如今硬盤大小已經不是問題了.
varchar:變長(你來多長,我存多長,可是要1byte字節標記後面多長)存取速度慢,可是省地方
注意:
①char(5),寬度5指的是字符的個數
②select char_length(name) from t4 ; 查詢某個字段中內容的長度,可是若是在該字段後面有空格時,他也不會算到長度裏面去,若是你寫的時候是'任務 '後面的空格在計算時不會算上,若是你想把它長度算上,就輸入:
SET sql_mode='PAD_CHAR_TO_FULL_LENGTH';便可
③當你使用where作篩選時,例如where name='任務',mysql會自動去掉後面的全部空格,再比較,而' 任務'前面有空格或者'任 務'中間有空格都不會被去掉,從而形成篩選查不到.
④若是你輸入select name from t13 where name like '李傑';時,字符串後面的空格數量必定要和你輸入數據庫時的數量一致,不然查不到
⑤在一張表中,不要把char和varchar混用
enum:多個選一個
set:多個選一個或者多個
create table consumer(
id int,
name char(16),
sex enum('male','female','other'),
level enum('vip1','vip2','vip3'),
hobbies set('play','music','read','run')
);
insert into consumer values
(1,'egon','male','vip2','music,read'); 由於hobbies是多選,這裏能夠選music和read兩個
insert into consumer values(1,'egon','xxxxx','vip2','music,read'); 這裏xxx是沒有的會報錯