簡體   English   中英

是否不可能有一個檢查約束引用一個也有外鍵的列?

[英]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_acolumn_b也是其他表的外鍵,它們都可以為空。 我只想確保table中的每一行都通過column_acolumn_b引用。

這個錯誤的原因是什么?


我試過什么

我試圖刪除外鍵,添加檢查約束並且它成功了。 然后,如果我將外鍵添加回column_b ,我仍然會收到相同的錯誤。

這是記錄在案的行為

CHECK約束中使用的列上禁止外鍵引用操作( ON UPDATEON DELETE )。 同樣,在外鍵引用操作中使用的列上也禁止使用CHECK約束。

因此,您需要在對列進行引用操作或檢查約束之間進行選擇。 或者,您可以保留引用操作並使用觸發器實現檢查邏輯(或保留檢查約束並在觸發器中實現引用操作。)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM