Sas*_*ota 4 mysql sql constraints unique-constraint mysql-5.7
假设我有一个这样的表:
CREATE TABLE dept (
id VARCHAR(255) NOT NULL PRIMARY KEY,
code VARCHAR(255) NOT NULL,
active BIT NOT NULL,
...
);
Run Code Online (Sandbox Code Playgroud)
问题:
我想在列上添加唯一约束code。active但仅当设置为true(仅应在活动记录中检查唯一性)时才应应用它。可以有许多带有active=false和相同的记录code,因此我不能对多列使用约束。
我尝试过的:
我在文档中没有找到任何参考文献证明这种约束是可能的,但我知道在其他数据库中使用基于函数的唯一索引是可能的。
当然,我可以编写一个触发器来检查每个添加/更新操作的不变量,但我希望有更有效的解决方案。
我正在使用 MySQL 5.7.15。
恐怕这在 MySQL 中是不可能的。
我过去已经“接近”解决这个问题,方法是使用一个可以为空的唯一约束列(替换 和active字段code)。当NULL- 它是“不活动的”,当除 - 之外的任何东西时,NULL它必须是唯一的。
但这并不能完全解决您所问的问题。(如果您可以更新您的问题以包含更大的情况,也许可以提出更好的建议?)
否则,通过存储过程读/写表,或者 - 正如您自己建议的那样 - 使用触发器做一些不优雅的事情。