MySQl我需要为另一列的某些值创建一个唯一的列

时间:2017-09-21 11:33:18

标签: mysql triggers unique-constraint

我在表T中有两列Name,IsDelete

IsDelete = 0

只能有唯一的名称

对于IsDelete = 1,可能存在重复的名称。

我正在使用此查询

CREATE UNIQUE INDEX ix ON T(Name) WHERE IsDelete = 0;

但是我收到了错误,

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行附近使用正确的语法' WHERE IsDeleted = 0

如何使用触发器解决此问题?

2 个答案:

答案 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;

这很好用