MySQL 觸發器可以模擬 CHECK 限制嗎?
與其他 RDBMS 不同,MySQL 不完全支援 CHECK 限制。但是,它提供了觸發器作為替代方案。傳統觸發器會設定預設值而不是回傳錯誤,這讓使用者想知道是否可以建立強制執行條件並傳回 CHECK 約束等錯誤的觸發器。
建立錯誤回傳觸發器
答案是肯定的。以下是建構此類觸發器的方法:
對於更新操作:
DELIMITER $$ CREATE TRIGGER chk_stats1 BEFORE UPDATE ON stats FOR EACH ROW BEGIN IF NEW.month > 12 THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Cannot add or update row: only'; END IF; END; $$
此觸發器會攔截「stats」表上的更新嘗試。如果新資料中的「月份」值超過 12,則會引發 SQLSTATE 錯誤並設定有意義的錯誤訊息。
對於插入操作:
DELIMITER $$ CREATE TRIGGER chk_stats BEFORE INSERT ON stats FOR EACH ROW BEGIN IF NEW.month > 12 THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Cannot add or update row: only'; END IF; END; $$
同樣,此觸發器在將資料插入「統計」之前檢查「月份」值
模擬CHECK約束
這些觸發器透過強制執行「月份」範圍來有效模擬 CHECK 約束。任何嘗試更新或插入「月份」值大於 12 的資料都會觸發錯誤。這可以透過防止無效值儲存在資料庫中來實現資料完整性。
以上是MySQL 觸發器可以模仿 CHECK 約束嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!