
*****
## 命名規范
* 表名建議使用有業務意義的英文詞匯,必要時可加數字和下劃線,并以英文字母開頭
* 庫、表、字段全部采用小寫
* MySQL 在 Linux 下默認是區分大小寫的,而在 Windows 下不區分大小寫。因此,防止出現問題,建議都設置為小寫。
* 避免用 MySQL 的保留字
* 命名(包括表名、列名)禁止超過 30 個字符
* 臨時庫、表名必須以 tmp 為前綴,并以日期為后綴,如:tmp\_shop\_info\_20190404
* 備份庫、表必須以 bak 為前綴,并以日期為后綴,如:bak\_shop\_info\_20190404
* 索引命名
* 非唯一索引必須按照"idx\_字段名稱"進行命名
* 唯一索引必須按照"uniq\_字段名稱"進行命名
## 設計規范
* 主鍵
* 表必須有主鍵
* 不使用更新頻繁的列做主鍵
* 盡量不選擇字符串列做主鍵
* 不使用 UUID MD5 HASH 做主鍵
* 默認使用非空的唯一鍵
* 如無特殊要求,建議都使用 InnoDB 引擎
* 默認使用 utf8mb4 字符集,數據排序規則使用 utf8mb4\_general\_ci
* utf8mb4 為萬國碼,無亂碼風險;與 utf8 編碼相比,utf8mb4 能支持 Emoji 表情
* 所有表、字段都需要增加 comment 來描述此表、字段所表示的含義
* data\_status TINYINT NOT NULL DEFAULT ‘1’ COMMENT ‘1代表記錄有效,0代表記錄無效’
* 盡可能不使用 TEXT、BLOB 類型
* 原因:會浪費更多的磁盤和內存空間,非必要的大量大字段查詢會淘汰掉熱數據,導致內存命中率急劇降低,影響數據庫性能。如果實在有某個字段過長需要使用 TEXT、BLOB 類型,則建議獨立出來一張表,用主鍵來對應,避免影響原表的查詢效率。
* 單表列數目建議小于 30
## SQL語句規范
* 避免隱式轉換
* 盡量不使用select \*,只 select 需要的字段
* 讀取不需要的列會增加 CPU、IO、NET 消耗,并且不能有效的利用覆蓋索引。使用 SELECT \* 容易在增加或者刪除字段后導致程序報錯
* 建議將子查詢轉換為關聯查詢
* 建議應用程序捕獲 SQL 異常,并有相應處理
## 行為規范
* 批量導入、導出數據必須提前通知 DBA 協助觀察
* 不在業務高峰期批量更新、查詢數據庫
* 刪除表或者庫要求盡量先 rename,觀察幾天,確定對業務沒影響,再 drop
- 1-數據庫-基本使用
- 1-1-數據存儲
- 1-2-數據庫
- 1-3-MySQL安裝和配置
- 1-4-SQL
- 1-5-數據完整性
- 1-6-命令行操作數據庫
- 2-MySQL查詢
- 2-1-MySQL查詢
- 2-2-條件
- 2-3-聚合函數
- 2-4-分組
- 2-5-排序
- 2-6-分頁
- 2-7-連接查詢
- 2-8-子查詢
- 2-9-自關聯
- 3-MySQL外鍵
- 4-MySQL與Python交互
- 4-1-數據準備
- 4-2-數據表的拆分
- 4-3-Python操作MySQL
- 5-MySQL高級
- 5-1-視圖
- 5-2-事務
- 5-3-索引
- 5-4-賬戶管理(了解)
- 6-數據庫存儲引擎
- 6-1-MyISAM存儲引擎
- 6-2-Innodb存儲引擎
- 6-3-CSV存儲引擎
- 6-4-Memory存儲引
- 7-MySQL基準測試
- 8-explain分析SQL語句
- 8-1-影響服務器性能的幾個方面
- 8-2-explain分析SQL
- 9-索引優化案例
- 10-索引優化
- 11-排序優化
- 12-慢查詢日志
- 13-Show Profile進行SQL分析
- 14-數據庫鎖
- 15-主從復制
- 16-MySQL分區表
- 17-MySQL操作規范