首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否不可能有一个检查约束引用,一个列也有外键?

问是否不可能有一个检查约束引用,一个列也有外键?
EN

Stack Overflow用户
提问于 2020-04-22 09:43:50
回答 1查看 1.1K关注 0票数 5

我正在MySQL 8上尝试添加一个check约束:

代码语言:javascript
复制
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,仍然会得到相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 09:53:30

我是记录在案的行为

在ON UPDATE约束中使用的列上禁止外键引用操作(ON DELETE、CHECK )。同样,在外键引用操作中使用的列上也禁止使用CHECK约束。

因此,您需要在列上有一个引用操作,还是有一个check约束。或者,您可以使用触发器保留引用操作并实现检查逻辑(或者保留check约束并在触发器中实现引用操作!)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61361962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档