1. 程式人生 > >MySQL使用規範

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中使用的關聯欄位使用統一資料型別。