[英]Is it not possible to have a check constraint reference a column that also has a foreign key?
我在 MySQL 8 上嘗試添加檢查約束:
ALTER TABLE `table` ADD CHECK (
(`column_a` IS NULL AND `column_b` IS NOT NULL) OR
(`column_a` IS NOT NULL AND `column_b` IS NULL)
);
但我不斷收到此錯誤:
列“column_b”不能在檢查約束“table_chk_1”中使用:在外鍵約束“table_ibfk_2”引用操作中需要。
我在互聯網上的其他任何地方都找不到對此錯誤的任何參考,我不明白問題出在哪里。 column_a
和column_b
也是其他表的外鍵,它們都可以為空。 我只想確保table
中的每一行都通過column_a
或column_b
引用。
這個錯誤的原因是什么?
我試圖刪除外鍵,添加檢查約束並且它成功了。 然后,如果我將外鍵添加回column_b
,我仍然會收到相同的錯誤。
這是記錄在案的行為:
在
CHECK
約束中使用的列上禁止外鍵引用操作(ON UPDATE
、ON DELETE
)。 同樣,在外鍵引用操作中使用的列上也禁止使用CHECK
約束。
因此,您需要在對列進行引用操作或檢查約束之間進行選擇。 或者,您可以保留引用操作並使用觸發器實現檢查邏輯(或保留檢查約束並在觸發器中實現引用操作。)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.