gpt4 book ai didi

mysql - 是否不可能有一个检查约束引用一个也有外键的列?

转载 作者:行者123 更新时间:2023-12-04 11:26:53 25 4
gpt4 key购买 nike

我在 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_acolumn_b也是其他表的外键,它们都可以为空。我只想确保 table 中的每一行通过 column_a 获得引用或通过 column_b .

这个错误的原因是什么?

我试过什么

我试图删除外键,添加检查约束并成功。然后,如果我将外键添加回 column_b我仍然遇到同样的错误。

最佳答案

这是 a documented behavior :

Foreign key referential actions (ON UPDATE, ON DELETE) are prohibited on columns used in CHECK constraints. Likewise, CHECK constraints are prohibited on columns used in foreign key referential actions.


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

关于mysql - 是否不可能有一个检查约束引用一个也有外键的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61361962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com