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

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

所以我想创建列让我们说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不支持Filtered Index和Conditional Index

mysql sql unique-key
1个回答
0
投票

最简单的方法可能是使用1指定主用户,使用null指定非主用户。由于nulls不是值(它们缺乏值),它们不参与唯一索引,并且在unique列上使用简单的master_user索引就可以了。

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

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
);
© www.soinside.com 2019 - 2024. All rights reserved.