建表:聲明列的過程
列:不同的列類型占的空間不一樣
選列的原則:夠用垃沦,又不浪費
列類型
數(shù)值型
①整型
Tinyint? /? Smallint? /? Mediumint? /? Int? /? Bigint
②小數(shù)型(浮點型垮抗,定點型)
Float(D,M),Decimal(D,M)
字符串型
Char(M)? /? Varchar(M)? /? Text?文本類型
日期/時間型
Date?日期? /? Time?時間? /? Datetime?時間時間類型 /? Year?年類型
整型列的可選屬性
Tinyint?默認(rèn)是有符號的唁毒,存儲-128--127
Tinyint /? Tinyint unsigned /? Tinyint(M) zerofill??
M:寬度(在0填充(zerofill)時才有意義 )
unsigned:無符號類型(非負(fù))影響存儲范圍
zerofill:0填充(默認(rèn)無符號) 00001?? 00005(M=5)
>alter table?表名 add 新列名 tinyint unsigned;? (增加列)
#列可以聲明默認(rèn)值恤煞,并且推薦聲明默認(rèn)值#
Not null Default 0(不允許為Null 沒有數(shù)值的時候顯示為0)
>alter table *** add 新列名 tinyint not null default 0;? #一次只能增加一列#
小數(shù)型
float(M,D)?????? decimal(M,D) (更精確)
M:精度(總位數(shù)厚骗,不包含點)
D:標(biāo)度(小數(shù)位)
float(4,2)?? -99.99---99.99
float(4,2) unsigned??? 0.00---99.99
>create table goods(
>name varchar(10) not null default '',
>price float(6,2) not null default 0.00
>)charset utf8;
字符型
Char:定長??? char(M)?? M:可容納的字符 數(shù)???????速度最快
Varchar:變長?? varchar(M)? M:可容納的字符 數(shù)???約2萬-6萬
Text?:文本串? ?不用加默認(rèn)值???約2萬-6萬個字符另萤,搜索速度較慢
區(qū)別:
char:M個字符梯影,如果存的小于M個字符巫员,實占M個字符? 0<=M<=255
varchar:M個字符,存的小于M個字符甲棍,設(shè)為N(N<M)简识,實占N個字符?0<=M<=65535
char:如果實際存儲內(nèi)容不足M個,則后面加空格補齊感猛,取出來的時候再把后面的空格去掉(所以如果內(nèi)容最后又空格七扰,將會被清除)
選擇原則:
1.空間利用率
四字成語表:char(4)
個人簡介,微博 140字:varchar(140)
2.速度
用戶名:char
日期時間型
①年:year? 1901-2155【0000表示錯誤時選擇】
如果輸入2位陪白,“00-69”? 表示2000-2069颈走,“70-99”? 表示1970-1999年
>create table y(
>ya year(4)
>);
②年-月-日:date? “1000-01-01”-“9999-12-31”
>create table d(
>title varchar(30),
>dt date
>)charset utf8;
>insert into d values ("開國大典","1949-10-01");
③09:00:00:time? “-838:59:59”-“838:59:59”
>create table t(
>tm time
>);
>insert into t values ('13:50:40');
④年-月-日? hh:mm:ss:datetime? “1000-01-01 00:00:00”-“9999-12-31 23:59:59”
>create table user(
>name varchar(20) not null default '',
>regtime datetime not null default '1000-01-01 00:00:00'
>)charset utf8;
在開發(fā)中很少使用日期時間類型來表示一個需要的精確到秒的列
時間戳:1970-01-01 00:00:00到當(dāng)前的秒數(shù)
一般存注冊時間,商品發(fā)布時間等咱士,并不是用datetime存儲立由,而是用時間戳
因為datetime雖然直觀,但計算不便
而用int型 存儲時間戳序厉,方便計算锐膜,而對于顯示來說,也方便格式化
create table teacher(
name varchar(20),
gender tinyint
);
>insert into teacher values ('張',1);
>create table t2(
>gender enum('男','女')
>)charset utf8;
>inserte into t2 values ('男') / ('女');