本規範旨在統一團隊資料庫設計開發標準,避免因規範缺失導致的維護災難,培養良好習慣保障軟體品質。適用於所有涉及資料庫設計開發的技術人員。
SELECT col FROM tbl;)SELECT *(COUNT(*) 除外),明確列出欄位v_區域、p_輸入、x_輸出、cur_游標)_YYYY[MM[DD]]create_user/time、update_user/time、remark、聯絡資訊等)CHAR(32)、單表用自增 UNSIGNED INT/BIGINT、統一名 idfk_表名、同引用欄位類型命名一致uk_表名_欄位、普通 idx_表名_欄位、全文 fullidx_表名_欄位v_表名[_表名...] 或 v_功能描述func_功能、預存程序 proc_功能、觸發器 trig_表名_ins/del/upd_before/aftertmp_功能、上線重命名表 原表名_YYYYMMDDretail_模組名(如 retail_pos/retail_mdm),用戶名與庫名一致utf8_bin(大小寫敏感)_histCHAR、不定長用 VARCHARDATE、含時分秒用 DATETIME/TIMESTAMP(注意範圍與時區差異)NUMBER 轉換:N=0→整型、N>0→DECIMAL(MySQL 超範圍截斷不報錯)CHAR、單字符 CHAR(1)'0000-00-00 00:00:00'、備註用空串)ENUM/SET 改 TINYINT、慎用 BLOB/TEXT(大欄位拆表關聯)、建議 UNSIGNED 存非負數ORDER BY、多表關聯必指定別名、基礎數據源自表不嵌套視圖GOTO、循環更新必批量提交+事務控制、游標必關閉、異常必回滾、註釋格式規範(COMMENT說明+##變更記錄)BEFORELIKE '%...' 開頭模糊查詢FOR UPDATE 嚴控條件避免鎖表、無必要禁用UNION ALL 替代 UNION(無去重需求)、減少去重!= 等非等值操作、WHERE 條件欄位上禁用函數轉換(轉換參數值)ORDER BY RAND()(全表掃描排序)、避免大 SQL 拆小 SQL#{var} 綁定、${var} 替換;動態 ORDER BY 必須枚舉白名單禁外部輸入IN 子句用 <foreach> 迭代陣列實現綁定,禁字串拼接LIMIT 大偏移量, 小行數WHERE create_time < last_time ORDER BY create_time DESC LIMIT N 或 INNER JOIN (SELECT id ... LIMIT offset, rows) USING(id)IF 聚合減少掃描、避免 HAVING 改 WHERE 前置過濾NOT EXISTS/IN(擇 NOT EXISTS)、少用 IS NULLIN 值 ≤ 300、大表避免 CAST/CONVERT、盡量避免全表掃描SELECT 建議 LIMIT 1000、適度冗余簡化 SQL、自增 ID 取 LAST_INSERT_ID()CHAR(N)/VARCHAR(N) 中 N 為**字符數**非位元組。UTF8 下漢字 3 位元組、字母數字 1 位元組。VARCHAR(44) 可存 44 字符(含混合)。
NOW()(秒)、CURDATE()(天)、CURTIME()(秒)DATE_ADD(date, INTERVAL expr type)、DATE_SUB(...),type 含 YEAR/MONTH/DAY/HOUR/MINUTEDATEDIFF(expr1, expr2) 返回天數差YEAR()/MONTH()/DAY()/WEEKDAY()DATE_FORMAT()/STR_TO_DATE(),格式 %Y-%m-%d %H:%i:%sCAST(expr AS type)、CONVERT(expr, type)、CONVERT(expr USING charset)| 維度 | MyISAM | InnoDB |
|---|---|---|
| 檔案結構 | .frm/.MYD/.MYI 三檔 | 表空間 + 日誌檔,受限於 OS 檔案大小 |
| 事務 | 不支援 | 支援 ACID、外鍵 |
| 鎖粒度 | 表鎖(讀寫互斥,寫優先,可配 low_priority_updates/concurrent_insert) | **行鎖**(針對索引,非索引查詢退化為表鎖),MVCC 非鎖定讀 |
COUNT(*) | 直接讀儲存行數極快 | 全表掃描計算(無 WHERE 時) |
| 大量 SELECT | 優 | 良 |
| 大量 INSERT/UPDATE | 差 | 優 |
DELETE FROM tbl | 重建表極快 | 逐行刪除較慢 |
LOAD TABLE FROM MASTER | 支援 | 不支援(需轉 MyISAM 導入再轉回) |
總結: 規範非束縛,而是**團隊協作的放大器**。嚴守命名與設計規範,謹慎用好開發鐵律,善用實用技術,**讓資料庫結構清晰、SQL 高效、維護無憂**。