繁体   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