我正在MySQL 8上尝试添加一个check约束:
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,仍然会得到相同的错误。
发布于 2020-04-22 09:53:30
我是记录在案的行为
在
ON UPDATE约束中使用的列上禁止外键引用操作(ON DELETE、CHECK)。同样,在外键引用操作中使用的列上也禁止使用CHECK约束。
因此,您需要在列上有一个引用操作,还是有一个check约束。或者,您可以使用触发器保留引用操作并实现检查逻辑(或者保留check约束并在触发器中实现引用操作!)
https://stackoverflow.com/questions/61361962
复制相似问题