列類型

整型 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) 根據具體存入的字符個數決定(會加入一個頭記錄記錄字符的長度,用于查找)(查詢速度稍慢,資源利用率一定程度會比較高)

類比于:分段收費,需要增加一個售票員記錄遠近收費