MySQL:一列中具有唯一值,但有一个例外

问题描述 投票:0回答:1

我创建了一列用户名,但每行的 id 都链接到另一个表。如果用户被删除,我想将用户名更改为“已删除”。所以我想允许除已删除用户之外的唯一值。

我遇到过这个解决方案:

CREATE UNIQUE INDEX unique_user
ON User(Username)
WHERE Username != 'Deleted';

但是 MySQL 会抛出一个错误,指出“

WHERE
在此位置无效,需要 EOF,';'”。 MySQL 是否不允许
WHERE
语句使用
CREATE UNIQUE INDEX
子句?有没有另一种方法可以拥有除一个之外的所有唯一值?

mysql database indexing where-clause mysql-workbench
1个回答
0
投票

我同意评论者的说法,你应该有一个额外的列,而不是将用户标记为活动或已删除。

但是,您可以做您想做的事。 MySQL 不支持条件索引(带有

WHERE
子句的索引)。但是您可以创建一个包含删除用户时的 ID 的函数索引:

CREATE UNIQUE INDEX unique_user
  ON User(Username, (CASE WHEN  Username = 'Deleted' THEN id ELSE 0 END));

演示:https://dbfiddle.uk/HDWnVeKl

© www.soinside.com 2019 - 2024. All rights reserved.