所以我想创建列让我们说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
最简单的方法可能是使用1
指定主用户,使用null
指定非主用户。由于null
s不是值(它们缺乏值),它们不参与唯一索引,并且在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
);