MYSQL我需要一个列仅用于
我有两列名称,IsDelete在表TMYSQL我需要一个列仅用于
只能有用于IsDelete = 0
唯一的名称IsDelete =另一列的某些价值观独特1,可能有重复的名字。
我使用这个查询
CREATE UNIQUE INDEX ix ON T(Name) WHERE IsDelete = 0;
但我发现了错误,
你有一个错误的SQL语法;检查与您的MySQL服务器版本对应的手册,以便在第1行'WHERE IsDeleted = 0时使用正确的语法。
如何使用触发器来解决此问题?
唯一索引必须具有对所有记录的引用。 他们不能有条件地创建独特的索引构造。
您设置的要求可以由另一个表结构覆盖,其中删除或不是记录的一部分。
您必须重新设计数据以使用具有唯一ID的主表并更改当前链接到主表。
这是数据规范化的基础理论课。
没有一种方法来创建一个触发器,当IsDeleted = 0时将停止插入重复数据?当IsDeleted = 1时,不会生成触发器。我正在寻找这个解决方案。 –
是的,所以我得到了一个触发器,检查条件是否为真。
DELIMITER $$
CREATE TRIGGER testing4
BEFORE INSERT ON biomitra_user FOR EACH ROW BEGIN IF EXISTS(从biomitra_user选择MOBILE_NUMBER其中IS_DELETED = 0)THEN SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT =“重复“; else set new.mobile_number = new.mobile_number; END IF; END $$
DELIMITER;
这工作正常
我认为索引创建在列而不是列的部分。因此,您不能在此声明中使用where子句。我认为这是你最好用存储过程或应用程序逻辑解决的问题。 –