mysql建表規範及註意事項
表設計規範
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代替float和double。(float和double,數字溢出不會報錯,會有精度損失,decimal數值會因溢出而報錯)
(1)float :浮點型,含字節數為4,32bit,7個有效位
double:雙精度實型,含字節數為8,15個有效位
decimal:數字型,128bit,不存在精度損失,常用於銀行帳目計算。(28個有效位)
4.建議使用unsigned存儲非負數值
無符號類型,非負限定。例如,
5.建議使用INT UNSIGNED存儲IPV4。(ipv4是互聯網協議(Internet Protocol,IP)的第四版);
6.整形定義中不添加長度,比如使用INT,而不是INT(4)。
7.不建議使用ENUM類型,使用TINYINT來代替(要插入enum的值,字段必須加引號,不加引號當然是數字,數字就是key,不是value。)
8.盡可能不使用TEXT、BLOB類型。
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建表規範及註意事項