1. 程式人生 > >mysql建表規範及註意事項

mysql建表規範及註意事項

關系數據庫 並發 arc float nod 32bit 字符串 8bit 設計

表設計規範

1.庫名,表名,字段名必須使用小寫字母,-”分割 ,長度不得超過12字符 , 要見名識意 ;

2.建議使用Innodb存儲引擎

(1)什麽是存儲引擎

不同的技術及配套的相關功能就是存儲引擎

(2)mysql存儲引擎

i).MylSAM:Mysql的默認數據庫,最為常用。有較高的插入,查詢速度,不支持事務

1》、什麽是事務

事務是訪問並且可能更新數據庫中各種數據項的一個程序執行單元(例如:在關系數據庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序。事務是恢復和並發控制的基本單位。事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麽都做,要麽都不做。

一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。

隔離性(isolation)。一個事務的執行不能被其他事務幹擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相幹擾

持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

Ii).InnoDB:支持事務,行級鎖定

Iii).Memory:所有數據置於內存的存儲引擎,有極高的插入,更新和查詢效率。但會占用和數據量成正比的存儲空間。並且其內容在重啟MySQL時會丟失

3.存儲精確浮點數必須使用decimal代替floatdouble。(floatdouble,數字溢出不會報錯,會有精度損失,decimal數值會因溢出而報錯)

1float :浮點型,含字節數為432bit7個有效位

double:雙精度實型,含字節數為815個有效位

decimal:數字型,128bit,不存在精度損失,常用於銀行帳目計算。(28個有效位)

4.建議使用unsigned存儲非負數值

無符號類型,非負限定。例如,

tinyint的存儲大小是1字節,取值範圍-127128。如果限定了unsigned取值範圍0-255。即不能取負值。

5.建議使用INT UNSIGNED存儲IPV4。(ipv4是互聯網協議(Internet ProtocolIP)的第四版;

6.整形定義中不添加長度,比如使用INT,而不是INT(4)

7.不建議使用ENUM類型,使用TINYINT來代替(要插入enum的值,字段必須加引號,不加引號當然是數字,數字就是key,不是value)

8.盡可能不使用TEXTBLOB類型。

a) 索引排序問題,只能使用max_sort_length的長度或者手工指定ORDER BY SUBSTRING(column,length)的長度來排序

b) Memory引擘不支持text,blog類型,會在磁盤上生成臨時表

c) 可能浪費更多的空間

d) 可能無法使用adaptive hash index

e) 導致使用where沒有索引的語句變慢

9.字段定義為not null;

a)如果null字段被索引,需要額外的1字節

b)可以用0,‘’代替

c)如果是索引字段一定要定義為not null

10.VARCHAR(N)N表示的是字符數不是字節數,比如VARCHAR(255),可以最大可存儲255個漢字,需要根據實際的寬度來選擇N

11.使用短數據類型,比如取值範圍為0-80時,使用TINYINT UNSIGNED

12.表字符集選擇UTF8

a) 使用utf8字符集,如果是漢字,占3個字節,但ASCII碼字符還是1個字節。
b) 統一,不會有轉換產生亂碼風險
c) 其他地區的用戶(美國、印度、臺灣)無需安裝簡體中文支持,就能正常看您的文字,並且不會出現亂碼
d)ISO-8859-1編碼(latin1)使用了單字節內的所有空間,在支持ISO-8859-1的系統中傳輸和存儲其他任何編碼的字節流都不會被拋棄。即把其他任何編碼的字節流當作ISO-8859-1編碼看待都沒有問題,保存的是原封不動的字節流。

13.使用VARBINARY存儲變長字符串。

14.存儲年用YEAR;存儲日期用DATE類型

15.存儲時間(精確到秒)建議使用TIMESTAMP類型,因為TIMESTAMP使用4字節,DATETIME使用8個字節。

mysql建表規範及註意事項