如何不允许特定值在数据库中重复

时间:2019-02-13 05:53:22

标签: mysql sql unique-key

所以我想创建一列,比如说master_user,所以这个master_user列具有0和1的位值。我想要实现的是使它成为使得master_user列只有一个'1'值,因为只有一个master_user。您可以有多个“ 0”值,但不能有“ 1”。

在SQL Server中,您可以这样做:

CREATE UNIQUE NONCLUSTERED INDEX [IX_master_user] ON [user]
(
    [master_user] ASC
)
WHERE ([master_user]=(1));

对于MySQL,我该怎么做?

谢谢。

更新:MySQL不支持过滤索引和条件索引

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是使用1来指定主要用户,使用null来指定非主要用户。由于null不是值(缺少值),因此它们不参与唯一索引,而在unique列上具有简单的master_user索引就可以解决问题

如果绝对必须保留0,则可以添加一个生成的列,以null替换0并使其唯一,以达到相同的效果:

CREATE TABLE users (
  username VARCHAR(10) PRIMARY KEY,
  master_user BIT NOT NULL,
  master_user_nullable BIT AS (CASE master_user WHEN 1 THEN 1 END) STORED UNIQUE
);