MySQL使用規範
一、 表設計類
強制類規範1. 建立表的儲存引擎必須是InnoDB。
2. 每個表必須顯式的指定一個主鍵。
3. 不允許使用聯合主鍵。
4. 不允許使用外來鍵。
5. 不允許存在和主鍵重複的索引。
6. 自增長欄位必須是主鍵或唯一索引。
7. 不允許在資料庫中儲存諸如圖片,影像之類的二進位制資料。
8. 不允許使用TEXT型別欄位
9. 建表時不允許顯式的指定除了utf8之外的其他字符集。
10. 對於所有宣告為NOT NULL的欄位,必須顯式指定預設值。
11. 必須包含時間戳欄位DataChange_LastTime,定義預設值為CURRENT_TIMESTAMP和on update CURRENT_TIMESTAMP,並新增索引。
建議類規範
1. 建議使用自增長欄位作為主鍵。
2. 對較長的字元型別,如果需要索引,則建立字首索引。
3. 不建議在資料庫存放日誌。
4. 建議將欄位都定義為not null。
5. 選用能滿足需求的最小型別。
6. 避免使用保留字命名DB物件。
7. 對錶和欄位都新增備註說明。
二、 SQL類
強制類規範
1. 禁止使用子查詢。
2. 禁止使用select *,必須指定需要的欄位。
3. update/delete只能單表操作,不允許多表關聯,不允許用子查詢,且一定要帶where條件。
4. insert語句要顯式指定插入的列名,且不允許使用insert .... select的形式。
5. 不允許使用儲存過程、儲存函式、觸發器和檢視。
6. 單條查詢語句中,不允許出現多於一次的join。
7. 不要在where後的篩選欄位上做運算。
建議類規範
1. 儘量不要在資料庫裡做運算。
2. 儘量不要做‘%’字首模糊查詢,如 like '%name'。
3. 不要使用大偏移量的limit分頁。
4. 連線MySQL不要設定成autocommit=0。
5. 批量insert語句最好採用bulk insert的方法,如insert into table(xxx) values (xxx),(xxx)。
6. update/delete儘量根據主鍵進行操作。
7. 儘量減少count()的使用,尤其是用來頻繁獲取全表記錄數。
8. 使用group by時,如無排序的需求,建議加order by null。
9. Join中使用的關聯欄位使用統一資料型別。