列類型
整型 tinyint,smallint,mediumint,int,bigint ?(可選參數unsigned ,(M,zerofill,結合使用才有意義))
浮點型 float(可選參數D,M) decimal(可選參數D,M)
字符串型 char(M) varchar(M) text-文本類型
日期時間類型 date,time,datatime,year
給表追加一個列,列類型為無符號tinyint
alter table [vg] add [id] tinyint unsigned not null default 0;
?
表中可存入255的id
insert into vg
(sname,id)
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) 根據具體存入的字符個數決定(會加入一個頭記錄記錄字符的長度,用于查找)(查詢速度稍慢,資源利用率一定程度會比較高)
類比于:分段收費,需要增加一個售票員記錄遠近收費
轉載于:https://blog.51cto.com/codeyi/1732011