列類型ide
整型 tinyint,smallint,mediumint,int,bigint (可選參數unsigned ,(M,zerofill,結合使用纔有意義))編碼
浮點型 float(可選參數D,M) decimal(可選參數D,M)ci
字符串型 char(M) varchar(M) text-文本類型資源
日期時間類型 date,time,datatime,year字符串
給表追加一個列,列類型爲無符號tinyintit
alter table [vg] add [id] tinyint unsigned not null default 0;table
表中可存入255的idclass
insert into vgtest
(sname,id)date
values
('test',255);
#分析M參數
alter table vg add age1 tinyint(1) not null default 0;
insert into vg class (sname,age1) values ('M1',3);
insert into vg (sname,age1) values ('agin M',99);
#這時候M是沒有意義的
select * from vg;
+--------+-----+-------+------+------+
| sname | age | socre | test | age1 |
+--------+-----+-------+------+------+
| 劉備 | 28 | 0 | 0 | 0 |
| 張飛 | 0 | -1 | 0 | 0 |
| test | 0 | 0 | 255 | 0 |
| M1 | 0 | 0 | 0 | 3 |
| agin M | 0 | 0 | 0 | 99 |
+--------+-----+-------+------+------+
#M必須和zerofill配合纔有意義
增長列
alter table vg add snum smallint(5) zerofill not null default 0;
insert into vg (sname,snum) values ('呂布',1);
insert into vg (sname,snum) values ('廖化',15);
select * from vg;
+--------+-----+-------+------+------+-------+
| sname | age | socre | test | age1 | snum |
+--------+-----+-------+------+------+-------+
| 劉備 | 28 | 0 | 0 | 0 | 00000 |
| 張飛 | 0 | -1 | 0 | 0 | 00000 |
| test | 0 | 0 | 255 | 0 | 00000 |
| M1 | 0 | 0 | 0 | 3 | 00000 |
| agin M | 0 | 0 | 0 | 99 | 00000 |
| 呂布 | 0 | 0 | 0 | 0 | 00001 |
| 廖化 | 0 | 0 | 0 | 0 | 00015 |
+--------+-----+-------+------+------+-------+
#比較上一個顯示,能看出M和zerofill結合的意義
#總結:M表示補0的寬度,和zerofill結合使用纔有意義
char(M) 定義以後每一個列的存儲長度是固定的,M個固定編碼(utf8,gbk)長度 (查詢速度比較快,形成必定資源浪費)
類比於:無論遠近,投幣一元的公交,對短途形成浪費
varchar(M) 長度能夠是(0--<M) 根據具體存入的字符個數決定(會加入一個頭記錄記錄字符的長度,用於查找)(查詢速度稍慢,資源利用率必定程度會比較高)
類比於:分段收費,須要增長一個售票員記錄遠近收費