mysql 列類型

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

類比於:分段收費,須要增長一個售票員記錄遠近收費

相關文章
相關標籤/搜索