text型
表達範圍就是65535位元組,一般用來存商品描述,等字元數比較多的等,它也有4種TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,儲存容量不同,含有字元集。
blob型
以二進位形式儲存資料,是的可以儲存圖片。度出去依然是圖片。
decimal型
DECIMAL列的聲明文法是DECIMAL(M,D), M是數位最大數(精度)。其範圍為1~65(在較舊的MySQL版本中,允許的範圍是1~254), D是小數點右側數位數目(標度)。其範圍是0~30,但不得超過M,一般用來儲存money 也就是錢比如:decimal(10,2),他是以字串形式儲存數位,不會引起儲存的資料不正常,缺斤短兩,儲存精度需求高的最好選擇這個欄位,那些選擇bigint類型存錢的 真不知道是怎麼想的。應該是不知道有這個欄位類型吧
float型
浮點型,也就是存小數,效果一般。
enum型
枚舉類型,就是建欄位的時候輸入幾個預設的字元,儲存也只能儲存這幾個字元中的一個。例如:enum(“Y”,‘’N”);
set型
一個集合。可以有0到64個值,均來自於指定內容和enum類似,但是enum只能儲存一個值,但是set可以儲存多個值,如果用多個值用逗號隔開儲存。
date型
儲存日期格式:‘YYYY-MM-DD‘,範圍:‘1000-01-01‘到‘9999-12-31‘。
time型
儲存時間格式:‘HH:MM:SS‘;
datetime
其實就是date和time合起來,儲存日期和時間格式:‘YYYY-MM-DD HH:MM:SS‘,範圍:‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘。
timestamp型(時間戳記)
格式:‘YYYYMMDDHHMMSS‘、‘YYMMDDHHMMSS‘、‘YYYYMMDD‘、‘YYMMDD‘,範圍:‘1970-01-01 00:00:00‘到‘2037-01-01 00:00:00‘。
一般儲存時間還是用int型,儲存時間戳記
year型
儲存年份的,格式”YYYY“;
好了就介紹這些,我用的比較多的吧,還有一些大同小異,如果需要特殊的看看MySQL手冊 ,基本上就差不多了。
下面我寫點 我對建表的一些理解和建議:
建表的時候最好有主鍵id,主鍵是可以沒有的,但是為了關聯和查詢快最好使用int型當做主鍵,記得是unsigned(無符號);
我看看到很多人為了儲存幾十到幾百的數字使用了,int(3) 這樣的類型,其實這樣做是不對的,因為只要是int就是佔用4個位元組,無論是存多少相當於多餘出來的浪費了;
char和varchar一個是定長一個是可變長度,一般char儲存手機號,密碼定長加密過的,為什麼不建議varchar,因為varvhar類型是變長,在搜尋上會慢於char型,如果使用者表的登入和密碼 最好選擇char這樣效果會好很多,查詢起來很快,其他的欄位可以看情況選擇varchar類型,告訴大家一個很多人不知道的東西例如:char(10)和varchar(10),都儲存10個字元,varchar 會多佔用一個位元組,因為需要儲存長度,電腦在搜尋的時候定長的資料搜尋起來會更快;
能用定長的欄位就用定長,能用更緊湊的類型就用更緊湊的類型。效果會好很多;
建表的時候欄位要合理,不是多建在一個表裡,也不是非得都拆開放,具體情況看使用情境;
建表的時候在最常where的欄位加上索引,普通索引就夠了,不過不一定,例如郵箱或者手機號,這些可以加一些唯一索引(uniqie) ,這樣可以保證資料唯一,查詢起來也更快;
根據使用情境和業務,添加不同的索引,索引常用的有:主鍵索引,唯一索引,普通索引, 和全文索引。可以將多個欄位放在一起建索引叫做,聯合索引,例如我將使用者名稱和密碼加上索引了,其實這樣不建議,因為搜尋的時候,最好不要select * from table where username=”usename” and password=”password”,而是要select * from table where username=”username” ,查詢出來後再將結果和password對比;
查詢資料的時候能用主鍵,就用主鍵,這樣查詢MySQL不需要掃描表而是像人翻目錄一樣,立馬找出來,其實MySQL所有的索引建立都是為了這個”目錄“,能夠在查詢的時候立馬找出來;
如果考慮到將來資料增長會很快,可以在建表的時候做好分表,比如評論表,可以根據一個hash演算法,建立多個評論表,這樣查詢起來會好很多,其實無非就是將大塊的資料,分散開,減少大面積的表掃描
其實還有很多MySQL建表和最佳化需要寫出來,由於時間的問題暫時先寫這些,以後有時間再繼續。