Mysql 是否不能将检查约束引用也包含外键的列?

Mysql 是否不能将检查约束引用也包含外键的列?,mysql,sql,create-table,check-constraints,mysql-8.0,Mysql,Sql,Create Table,Check Constraints,Mysql 8.0,我在MySQL 8上尝试添加一个检查约束: ALTER TABLE`TABLE`添加检查( (`column_a`为空,`column_b`不为空)或 (`column_a`不为空,`column_b`为空) ); 但我一直得到: 列“Column_b”不能用于检查约束“table_chk_1”:外键约束“table_ibfk_2”引用操作中需要 我在互联网上的任何地方都找不到关于这个错误的任何参考,我也不明白问题出在哪里。 column_a和column_b也是其他表的外键,它们都可以为空。

我在MySQL 8上尝试添加一个检查约束:

ALTER TABLE`TABLE`添加检查(
(`column_a`为空,`column_b`不为空)或
(`column_a`不为空,`column_b`为空)
);
但我一直得到:

列“Column_b”不能用于检查约束“table_chk_1”:外键约束“table_ibfk_2”引用操作中需要

我在互联网上的任何地方都找不到关于这个错误的任何参考,我也不明白问题出在哪里。
column_a
column_b
也是其他表的外键,它们都可以为空。我只想确保
表中的每一行都有一个通过
列a
或通过
列b
的引用

这个错误的原因是什么


我试过什么 我尝试删除外键,添加检查约束,结果成功了。然后,如果我将外键添加回
列b
,我仍然会得到相同的错误。

这是:

检查
约束中使用的列上禁止外键引用操作(
更新时
删除时
)。同样,在外键引用操作中使用的列上禁止使用
CHECK
约束


因此,您需要在列上具有引用操作或具有检查约束之间进行选择。或者,您可以保留引用操作并使用触发器实现检查逻辑(或者保留检查约束并在触发器中实现引用操作!)。

它似乎专门指引用操作。这类似于FK中指定的删除级联上的
。请共享表的
create table
语句。哦,是的,显然这是由
列的
更新级联上的
引起的。嗯,我不确定我是否理解这种行为背后的原因?也许你有什么见解吗?@shoediaminte自己也遇到了同样的问题。超级讨厌。MySQL在很多方面都有值得怀疑的基本原理,我想我们只能接受它(