MySQL 常用字段類型,介紹及其建表使用方法經驗分享


由於工作的公司沒有專業的DBA又經常需要建立各種各種的表來滿足自己的業務邏輯,所以經常查看MySQL 手冊或者谷歌查看相關資料,所以本人就根據我的工作經驗和相關資料來介紹一下MySQL各種字段類型及其使用。(由於本人還算是菜鳥哪里寫的不對請多多指正,有興趣的可以探討一下)

MySQL字段類型

int型包括(tinyint, smallint, mediumint, int, bigint)

    tinyint是1個字節表達范圍就是2的8次方(-128-128) 或者(0-255) 很多人不明白為什么有兩種情況,因為在計算機中有一種說法叫做無符號,也就是全部是正整數,所以在用MySQL 選擇整形字段的時候一定要加上unsigned也就是無符號,因為負數基本不會用到。

    smallint是2個字節表達范圍2的16次方

    smallint是3個字節表達范圍2的24次方

    int是4個字節表達范圍2的32次方,記住這個類型是不能存儲手機號的,很多人用它存然后直接報錯了,因為int最長到10長度,手機號是11位,所以如果存手機號我的建議就是下面的char類型

    bigint是8個字節表達方位就是2的64次方。

char型

    表達范圍0-255字節數,如果是存字母就是255個,因為每個字母只占一個字節,無論是什么編碼,如果是存gbk存中文就是2個字節代表一個漢字,所以就是255/2,如果是utf8編碼就是255/3,因為utf8編碼下的中文占用三個字節代表一個漢字。正確的說應該叫做Unicode編碼 又叫做萬國碼,他的實現有utf8

varchar型

    表達范圍是0-65535字節,我有一個長輩同事,年齡較大,他到現在還認為varchar最大是0-255,這是錯誤的,如果是在MySQL5.0.3 之前的版本是對的,后面的版本都已經改成了65535字節理論上存儲漢字utf8就是2000多個。

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手冊 ,基本上就差不多了。

下面我寫點 我對建表的一些理解和建議:

1、建表的時候最好有主鍵id,主鍵是可以沒有的,但是為了關聯和查詢快最好使用int型當做主鍵,記得是unsigned(無符號);

2、 我看看到很多人為了存儲幾十到幾百的數字使用了,int(3) 這樣的類型,其實這樣做是不對的,因為只要是int就是占用4個字節,無論是存多少相當於多余出來的浪費了;

3、char和varchar一個是定長一個是可變長度,一般char存儲手機號,密碼定長加密過的,為什么不建議varchar,因為varvhar類型是變長,在搜索上會慢於char型,如果用戶表的登錄和密碼 最好選擇char這樣效果會好很多,查詢起來很快,其他的字段可以看情況選擇varchar類型,告訴大家一個很多人不知道的東西例如:char(10)和varchar(10),都存儲10個字符,varchar 會多占用一個字節,因為需要存儲長度,計算機在搜索的時候定長的數據搜索起來會更快;

4、 能用定長的字段就用定長,能用更緊湊的類型就用更緊湊的類型。效果會好很多;

5、建表的時候字段要合理,不是多建在一個表里,也不是非得都拆開放,具體情況看使用場景;

6、建表的時候在最常where的字段加上索引,普通索引就夠了,不過不一定,例如郵箱或者手機號,這些可以加一些唯一索引(uniqie) ,這樣可以保證數據唯一,查詢起來也更快;

7、 根據使用場景和業務,添加不同的索引,索引常用的有:主鍵索引,唯一索引,普通索引, 和全文索引。可以將多個字段放在一起建索引叫做,聯合索引,例如我將用戶名和密碼加上索引了,其實這樣不建議,因為搜索的時候,最好不要select * from table where username=”usename” and password=”password”,而是要select * from table where username=”username” ,查詢出來后再將結果和password對比;

8、查詢數據的時候能用主鍵,就用主鍵,這樣查詢MySQL不需要掃描表而是像人翻目錄一樣,立馬找出來,其實MySQL所有的索引建立都是為了這個”目錄“,能夠在查詢的時候立馬找出來;

9、如果考慮到將來數據增長會很快,可以在建表的時候做好分表,比如評論表,可以根據一個hash算法,建立多個評論表,這樣查詢起來會好很多,其實無非就是將大塊的數據,分散開,減少大面積的表掃描  

   其實還有很多MySQL建表和優化需要寫出來,由於時間的問題暫時先寫這些,以后有時間再繼續。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM