[英]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.