首頁 >資料庫 >mysql教程 >為什麼我的 MySQL CHECK 約束不起作用?

為什麼我的 MySQL CHECK 約束不起作用?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-10 11:20:45564瀏覽

Why Aren't My MySQL CHECK Constraints Working?

了解 MySQL 中的 CHECK 約束行為

MySQL 對 CHECK 約束的處理有時可能會出乎意料。 即使定義正確,CHECK 約束也可能看起來不活動。 關鍵是了解MySQL版本相容性。

MySQL 8.0.16 是第一個完全支援 CHECK 限制的版本。 如果您的 MySQL 版本早於 8.0.16,則 CHECK 子句將被所有儲存引擎解析但忽略。 違反約束的資料將被正確插入。

查閱官方MySQL參考手冊(https://www.php.cn/link/e6c19a87ef9e816e02ce247d4f41d38a)來確認您的MySQL版本的功能。

CHECK 約束的替代方案(對於較舊的 MySQL 版本):

如果您的 MySQL 版本缺乏 CHECK 約束支持,請考慮使用觸發器。觸發器執行自訂程式碼以回應行插入等資料庫事件。 觸發器可以在插入之前驗證數據,確保數據完整性。

例如,為 SD 表中的 Customer 欄位強制執行非負值的觸發器可以是:

<code class="language-sql">DELIMITER //
CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer
FOR EACH ROW
BEGIN
  IF NEW.SD < 0 THEN
    SET NEW.SD = 0;
  END IF;
END //
DELIMITER ;</code>

此觸發器攔截 INSERT 表上的 Customer 語句。如果 SD 為負數,則觸發器將其設為零。 這提供了與 CHECK 約束類似的功能。

以上是為什麼我的 MySQL CHECK 約束不起作用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn