假设我有这样的表格:
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
的记录,因此我不能在多个列上使用约束。
我尝试过的:
我在文档中没有找到任何参考证明这种约束是可能的,但我知道在其他数据库中可以使用唯一函数索引实现。
当然,我可以编写触发器,在每个添加/更新操作上检查不变量,但我希望有更有效的解决方案。
我正在使用MySQL 5.7.15。
NULL
时,它是“非活动”的;当为除NULL
以外的任何值时,它必须是唯一的。否则,通过存储过程读写表格或使用触发器进行一些不太优雅的操作。 - wally