gpt4 book ai didi

MySQL基于列值的唯一约束

转载 作者:行者123 更新时间:2023-11-29 05:58:02 25 4
gpt4 key购买 nike

假设我有一个这样的表:

CREATE TABLE dept (
id VARCHAR(255) NOT NULL PRIMARY KEY,
code VARCHAR(255) NOT NULL,
active BIT NOT NULL,
...
);

问题:

我想在 code 列上添加一个唯一约束。但它应该仅在 active 设置为 true 时应用(仅应在事件记录中检查唯一性)。可以有很多记录具有 active = false 和相同的 code 所以我不能在多个列上使用约束。

我尝试了什么:

我没有在 the documentation 中找到任何引用资料证明这种约束是可能的,但我知道在 other databases 中是可能的使用独特的基于函数的索引。

当然我可以编写一个触发器来检查每个添加/更新操作的不变量,但我希望有更有效的解决方案。

我正在使用 MySQL 5.7.15。

最佳答案

恐怕这在 MySQL 中是不可能的。

过去,我已经“接近”解决这个问题,方法是使用一个唯一约束的可为空的列(替换 activecode 字段)。当 NULL 时 - 它是“不活动的”,当 NULL 以外的任何东西时 - 它必须是唯一的。

但这并不能完全解决您提出的问题。 (如果您可以更新您的问题以包含更大的图片,也许可以建议更好的东西?)

否则通过存储过程读取/写入表,或者 - 正如您自己建议的那样 - 使用触发器做一些不雅的事情。

关于MySQL基于列值的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47550176/

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