我在 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)
);
但我一直收到 this error :
Column 'column_b' cannot be used in a check constraint 'table_chk_1': needed in a foreign key constraint 'table_ibfk_2' referential action.
我在互联网上的其他任何地方都找不到对此错误的任何引用,我不明白问题是什么。
两者
column_a
和 column_b
也是其他表的外键,它们都可以为空。我只想确保 table
中的每一行通过 column_a
获得引用或通过 column_b
.这个错误的原因是什么?
我试过什么
我试图删除外键,添加检查约束并成功。然后,如果我将外键添加回
column_b
我仍然遇到同样的错误。
最佳答案
Foreign key referential actions (
ON UPDATE
,ON DELETE
) are prohibited on columns used inCHECK
constraints. Likewise,CHECK
constraints are prohibited on columns used in foreign key referential actions.
因此,您需要在对列进行引用操作或检查约束之间进行选择。或者,您可以保留引用操作并使用触发器实现检查逻辑(或保留检查约束并在触发器中实现引用操作!)。
关于mysql - 是否不可能有一个检查约束引用一个也有外键的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61361962/