a>.字符型
1>.固定長度的字符類型,換句話說就是定義了一個字符長度,如果你存儲的字節(jié)長度不足時,系統(tǒng)會自動給你用“0”進行占位操作,當字符類型的長度超過我們預(yù)定義的長度時,就會報錯。用char(#number[最多存儲255個字符])關(guān)鍵字來定義。(也就是說,char(10),就表示你每個字符串存儲的長度應(yīng)該是10,比如你的單個字符串長度是7,那么還有3個空位系統(tǒng)自動會用“0”進行占位。也就沒有字符存儲的大小是一致的。)
2>.自動變化長度的字符類型,即varchar(#bumber[最多存儲65535個字符,即2個字節(jié)])。和上面的char(#number)用法相似,只不過唯一不同的是存儲的字符的長度是可變化的。也就是說,varchar(10),就表示你每個字符串的長度應(yīng)該是10,如果你的單個字符串長度是6,那么它就會以6個長度來存取的你的數(shù)據(jù),而不會去可以給你填滿其他的占位符,它是以你實際長度為準的。注意,char(#number)和varchar(#num)存儲數(shù)據(jù)的時候都不區(qū)分大小寫。如果你強烈要求要區(qū)分大小寫的話也是可以的,和char(#number)類似的一種方法叫做binary(#number),他們唯一不同就是char(#number)不區(qū)分大小寫,而binary(#number)是區(qū)分大小寫的。同理,和varchar(#number)對應(yīng)的就是varbinary(#number)。
3>.其實char(#number),var(#number),binary(#number),varbinary(#number)它們的存儲數(shù)據(jù)的大小是有上限的。如果你寫博客,里面的正文數(shù)據(jù)長度一定是很大的。這個時候這四種定義類型就不再合適了,這個時候就有了面向?qū)ο蟠鎯Φ母拍?,就是不講數(shù)據(jù)放在一個表中了,而是將數(shù)據(jù)放在一個指定的文件,而在表中存儲的只是一個指針。當用戶用到該數(shù)據(jù)時,就會去調(diào)用這個指針所對應(yīng)的文件。而這種存儲方式也是區(qū)分大小寫的,相比之前學習的四種定義類型,test和blob數(shù)據(jù)類型存儲的容量更大,test的類型擁有char(#number),binary(#number)的特點,而blob數(shù)據(jù)類型擁有varchar(#number),varbinary(#number)。而test和blob又被細分了4類,例如blob分為TinyBlob(最多存儲255個字符,即一個字節(jié)),Blob(最多存儲64kb,需要減去2個字節(jié)的空間),MediumBlob(最多存儲16MB的空間,需要減去3個字節(jié)),LongBlob(最多存儲4G的空間,需要減去4個字節(jié))。test分為TinyText(最多存儲255個字符,即一個字節(jié)與char索引方式是不同的,TinyText不能使用全字段索引而char確實可以的),Text(最多存儲65535個字符,需要減去2個字節(jié)),MediumText(最多存儲16777215個字符,需要減去3個字節(jié)),LongText(最多存儲4294967295個字符,表示可以存儲4個G)等等。
4>.字符型(char、varchar和text)常用的屬性修飾符:
A>.NOT NULL(非空約束)
B>.NULL(允許為空)
C>.default ‘string’(默認值,不適用于text類型)
D>.CHARACTER SET 字符集
mysql>show variables like '%char%'; #查看默認的字符集
mysql>show character set; #查看數(shù)據(jù)庫支持的字符集
E>.collation '規(guī)則':排序規(guī)則
msyql>show collation; #查看數(shù)據(jù)庫支持的排序規(guī)則
5>.binary,varbinaray和blob字符常用的屬性修飾符
A>.NOT NULL
B>.NULL
C>.default 不適用與blob
b>.數(shù)值型
1>.精確數(shù)值型
精確數(shù)值型有兩類,即整形(integer)和十進制(decimal)。在金融領(lǐng)域中,一般都用十進制存儲數(shù)值型。而integer類型來講,它有好幾種變化形式分別用來表示所能夠存儲的范圍大小的,比如:
A>.只占用一個字節(jié)的tinyint(微整型,取值范圍是-128127或者0255);
B>.占用兩個字節(jié)的samllint(小整型,取值范圍是-3276832767或者065535);
C>.占用三個字節(jié)的mediuint(中等整型,取值范圍-83886088388607或者016777215);
D>.占用四個字節(jié)的int(整型,取值范圍-21474836482147483647或者04294967295);
E>.占用八個字節(jié)的bingint(大整形,取值范圍是-92233720368547758089223372036854775807或者018446744073709551615)等等。
整形的常用屬性修飾符:
A>.AUTO_INCREMENT:自動增長(前提:非空,且唯一,支持索引,非負值[UNSIGNED],注意:TRUNCATE 用來清空表中數(shù)據(jù))
B>.LEST_INSERT_ID():可以查看上次增長的數(shù)值,當插入多行時,只記錄第一行
C>.UNSIGNED:無符號
D>.NULL
E>.NOT NULL
F>.DEFAULT
2>.近似數(shù)值型
近似數(shù)值型又分為單精度浮點型(float)和雙精度浮點型(double)。
浮點型常用修飾符:(使用g,f來定義總共有多少數(shù)字和小數(shù)點后有多少數(shù)字)
A>.NULL
B>.NOT NULL
C>.UNSIGNSD
D>.DEFAULT
3>.位
按位(bit)實現(xiàn)數(shù)據(jù)存儲的。這種方式不建議使用。
c>.日期時間型
1>我們在數(shù)據(jù)庫中可能需要存儲日期或時間,日期時間型其實本質(zhì)上被我們存儲為數(shù)值或字符。
A>.其中我們可以用占用三個字節(jié)的date(日期型)來存儲時間;
B>.用占用三個字節(jié)的time(時間型)來存儲時間;
C>.用占用八個字節(jié)的datetime(日期時間型)來存儲日期和時間;
D>.當然,你也可以存儲在四個字節(jié)的timestamp(時間戳,存儲自1970年1月1號0點0分0秒至你所指定的時間為止所經(jīng)過的秒數(shù)。);
E>.對了還有一個字節(jié)來記錄年的year類型。即Year(2)和year(4),前者表示方法是:“0099”,默認值是:“00”;后者表示方法是:“19012155”,默認為“0000”。
2>.日期時間型常用的修飾符
A>.NULL
B>.NOT NULL
C>.DEFAULT
d>.布爾型
MySQL其實沒有真正意義上的布爾型,而是使用的tinyint(微整型),而且只顯示一位來表示的,要么是0,要么是1.
e>NULL
表示什么也沒有存,注意空白字符不等于空喲,數(shù)字0也不代表空。
f>.內(nèi)置類型(事實上ENUM和SET也是屬于字符型喲)
1>.MySQL也有兩種常見的內(nèi)置類型,即ENUM(枚舉)和SET(集合)。
2>.枚舉類型是指將所有的情況的列舉出來,我們從中挑選處一種即可。比如今天是星期幾,我們通過枚舉方法列出所有的可能性,將星期一至星期日的其中情況都枚舉出來,這樣用戶輸入的星期八則是不合法的。集合類型是指在一個范圍內(nèi)有很多元素,你可以把這些元素任意拼湊,怎么拼都行,但是每個元素必須是在給定范圍內(nèi)的,不能超出限定范圍。就好比你是某學校的大一新生的班主任,現(xiàn)在你要對你的學生進行分組處理。其中每個組的每一個成員必須都是你的班級的學生,而不能講其他班級的學生拉倒你的班級進行分組。
3>.ENUM和SET的修飾符
A>.NULL
B>.NOT NULL
C>.DEFAULT ‘’