MySQL 觸發器可以複製 CHECK 限制嗎?
CHECK 約束是其他 RDBMS 系統中一個有用的功能,允許強制執行特定條件關於列值。然而,MySQL 本身並不支援 CHECK 約束。這給想要實現類似功能的開發人員帶來了挑戰。
此問題的潛在解決方案是利用 MySQL 觸發器。觸發器是在發生某些事件時執行特定操作的資料庫對象,例如從表中插入、更新或刪除資料。透過建立觸發器,您可以定義在執行表上的操作之前應滿足的一組條件。
使用觸發器回傳錯誤
雖然觸發器可用於設定欄位的預設值,但也可以建構一個觸發器,在不滿足條件時傳回錯誤。這使我們能夠模擬 CHECK 約束的行為。
例如,讓我們建立一個觸發器來檢查統計表的月份列,並在值大於 12 時拋出錯誤。此行為模仿檢查限制:
對於INSERT操作:
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; $$
對於UPDATE 操作:
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; $$
以上是MySQL 觸發器可以模仿 CHECK 約束的行為嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!