使用索引和触发器实现条件唯一性约束。假设需要在表中添加一个约束:一个列的值必须在另一个列的特定值下是唯一的。例如,一个人只能拥有一个主要的电子邮件地址。首先,在列中添加一个惟一性索引,然后创建一个BEFORE INSERT和BEFORE UPDATE触发器。
示例代码如下:
CREATE TABLE person ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50), is_primary INT );
CREATE UNIQUE INDEX idx_unique_email ON person(email) WHERE is_primary = 1;
CREATE TRIGGER trigger_unique_email BEFORE INSERT OR UPDATE ON person FOR EACH ROW BEGIN IF NEW.is_primary = 1 AND EXISTS ( SELECT * FROM person WHERE email = NEW.email AND is_primary = 1 AND id != NEW.id ) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Primary email must be unique'; END IF; END;
上一篇:表上的多个触发器
下一篇:表上的新索引导致查询超时。