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

來源:互聯網
上載者:User

標籤:

由於工作的公司沒有專業的DBA又經常需要建立各種各種的表來滿足自己的商務邏輯,所以經常查看MySQL 手冊或者Google查看相關資料,所以本人就根據我的工作經驗和相關資料來介紹一下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手冊 ,基本上就差不多了。

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

     建表的時候最好有主鍵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建表和最佳化需要寫出來,由於時間的問題暫時先寫這些,以後有時間再繼續。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.