首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL SQL Mode 深度解析:嚴格模式如何守護資料品質

     編輯:MySQL 資料庫相關知識

SQL Mode 是什麼?

MySQL 可在不同 SQL 模式下運行,定義支援的 SQL 語法與資料驗證嚴格程度。透過啟動參數 --sql-mode 或執行期 SET [SESSION|GLOBAL] sql_mode='modes' 切換。MySQL 4.1 起支援動態調整。

預設模式的隱患

Linux 安裝後預設 sql_mode 為空,屬「非嚴格模式」:

  • 日期欄位允許寫入 '0000-00-00 00:00:00' 等非法值。
  • 字串長度超過欄位定義時,MySQL 靜默截斷尾部字元仍繼續寫入,不報錯。
CREATE TABLE t5 (c1 CHAR(3));
INSERT INTO t5 VALUES ('abcd');  -- 實際存入 'abc'

嚴格模式:STRICT_TRANS_TABLES / STRICT_ALL_TABLES

開啟後,非法值將直接報錯並回滾操作:

SET SESSION sql_mode='STRICT_TRANS_TABLES';
INSERT INTO t5 VALUES ('abcd');
-- ERROR 1406 (22001): Data too long for column 'c1' at row 1

權衡與風險

  • 建議生產環境啟用嚴格模式,保障資料完整性。
  • 若儲存引擎不支援事務(如 MyISAM),嚴格模式下多條 DML 組成的批次操作,前段成功後段失敗時無法回滾前段,導致資料不一致風險。
  • 需根據業務容忍度、引擎特性綜合評估,選擇 STRICT_TRANS_TABLES(事務表嚴格)或 STRICT_ALL_TABLES(全表嚴格)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved