我在表T中有两列Name,IsDelete
IsDelete = 0
只能有唯一的名称对于IsDelete = 1,可能存在重复的名称。
我正在使用此查询
CREATE UNIQUE INDEX ix ON T(Name) WHERE IsDelete = 0;
但是我收到了错误,
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行附近使用正确的语法' WHERE IsDeleted = 0
如何使用触发器解决此问题?
答案 0 :(得分:0)
唯一索引必须引用所有记录。 它们不能有条件地创建独特的索引构造。
您设置的要求可以由另一个表结构覆盖,其中被删除或不是记录的一部分。
您必须重新设计数据以使用具有唯一ID的主表,并更改当前链接到主表的数据。
这是数据规范化的基础理论课。
答案 1 :(得分:0)
是的,所以我得到了一个触发器,可以检查条件是否真实。
DELIMITER $$
创建触发器测试4
在插入biomitra_user之前
为了每行开始
如果EXISTS(从biomitra_user选择mobile_number,其中is_deleted = 0)那么
SIGNAL SQLSTATE'02000'SET MESSAGE_TEXT ='Duplicate';
其他
set new.mobile_number = new.mobile_number;
万一;
END $$
DELIMITER;
这很好用