熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

MySQL的數據類型和建庫策略詳解

2013-11-23 21:08:27  來源: MySQL 

  無論是在小得可憐的免費數據庫空間或是大型電子商務網站合理的設計表結構充分利用空間是十分必要的這就要求我們對數據庫系統的常用數據類型有充分的認識下面我就將我的一點心得寫出來跟大家分享

  一數字類型

  數字類型按照我的分類方法分為三類整數類小數類和數字類

  我所謂的數字類就是指DECIMAL和NUMERIC它們是同一種類型它嚴格的說不是一種數字類型因為他們實際上是將數字以字符串形式保存的他的值的每一位(包括小數點)占一個字節的存儲空間因此這種類型耗費空間比較大但是它的一個突出的優點是小數的位數固定在運算中不會失真所以比較適合用於價格金額這樣對精度要求不高但准確度要求非常高的字段

  小數類即浮點數類型根據精度的不同有FLOAT(單精度)和DOUBLE(雙精度)兩種它們的優勢是精確度FLOAT可以表示絕對值非常小小到約 E 小數點後面有個零)的小數而DOUBLE更是可以表示絕對值小到約 E 小數點後面有個零)的小數FLOAT類型和DOUBLE類型占用存儲空間分別是字節和字節如果需要用到小數的字段精度要求不高的當然用FLOAT了!可是說句實在話我們民用的數據哪有要求精度那麼高的呢?這兩種類型至今我沒有用過——我還沒有遇到適合於使用它們的事例

  用的最多的最值得精打細算的是整數類型從只占一個字節存儲空間的TINYINT到占個字節的BIGINT挑選一個夠用並且占用存儲空間最小的類型是設計數據庫時應該考慮的TINYINTSMALLINTMEDIUMINTINT和BIGINT占用存儲空間分別為字節字節字節字節和字節就無符號的整數而言這些類型能表示的最大整數分別為如果用來保存用戶的年齡(舉例來說數據庫中保存年齡是不可取的)用TINYINT就夠了九城的《縱橫》裡各項技能值用SMALLINT也夠了如果要用作一個肯定不會超過行的表的AUTO_INCREMENT的IDENTIFY字段當然用 MEDIUMINT 不用 INT 試想每行節約一個字節行可以節約兆多呢!

  二日期時間類型

  日期和時間類型比較簡單無非是 DATETIMEDATETIMETIMESTAMP和YEAR等幾個類型只對日期敏感而對時間沒有要求的字段就用DATE而不用DATETIME是不用說的了單獨使用時間的情況也時有發生——使用TIME但最多用到的還是用DATETIME在日期時間類型上沒有什麼文章可做這裡就不再詳述

  字符(串)類型

  不要以為字符類型就是 CHAR !CHAR和VARCHAR的區別在於CHAR是固定長度只要你定義一個字段是CHAR()那麼不論你存儲的數據是否達到了個字節它都要占去個字節的空間而VARVHAR則是可變長度的如果一個字段可能的值是不固定長度的我們只知道它不可能超過個字符把它定義為 VARCHAR()是最合算的VARCHAR 類型的實際長度是它的值的(實際長度+)為什麼+呢?這一個字節用於保存實際使用了多大的長度呀!從這個+中也應該看到如果一個字段它的可能值最長是個字符而多數情況下也就是用到了個字符時用VARCHAR就不合算了因為在多數情況下實際占用空間是個字節比用CHAR()還多占用一個字節!

  舉個例子就是一個存儲股票名稱和代碼的表股票名稱絕大部分是四個字的個字節股票代碼上海的是六位數字深圳的是四位數字這些都是固定長度的股票名稱當然要用 CHAR() 股票代碼雖然是不固定長度但如果使用VARVHAR()一個深圳的股票代碼實際占用空間是個字節而一個上海的股票代碼要占用個字節!考慮到上海的股票數目比深圳的多那麼用VARCHAR()就不如CHAR()合算了

  雖然一個CHAR或VARVHAR的最大長度可以到我認為大於的CHAR是幾乎用不到的——很少有大於個字節長度的固定長度的東東吧?不是固定長度的就用VARCHAR!大於的VARCHAR也是幾乎用不到的——比這更大的用TEXT就好了TINYTEXT最大長度為占用空間也是(實際長度+)TEXT最大長度占用空間是(實際長度+)MEDIUMTEXT最大長度占用空間是(實際長度+)LONGTEXT最大長度占用空間是(實際長度+)為什麼++++?你要是還不知道就該打PP了這些可以用在論壇啊新聞啊什麼的用來保存文章的正文根據實際情況的不同選擇從小到大的不同類型

  枚舉和集合類型

  枚舉(ENUM)類型最多可以定義種不同的字符串從中做出選擇只能並且必須選擇其中一種占用存儲空間是一個或兩個字節由枚舉值的數目決定集合(SET)類型最多可以有個成員可以選擇其中的零個到不限定的多個占用存儲空間是一個到八個字節由集合可能的成員數目決定

  舉個例子來說在SQLServer中你可以節約到用一個Bit類型來表示性別(男/女)但MySQL沒有Bit用TINTINT?不可以用ENUM(帥哥美眉)!只有兩種選擇所以只需一個字節——跟TINYINT一樣大但卻可以直接用字符串帥哥美眉來存取真是太方便啦!

  好了MySQL的數據類型介紹得差不多我的建庫策略也隨著介紹數據類型介紹給大家一些但這只是其中一部分篇幅有限不能再細說其他的就靠各人在對數據類型理解的基礎上多多實踐多多討論


From:http://tw.wingwit.com/Article/program/MySQL/201311/29648.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.