2 列的唯一约束,其中一列具有特定值
Unique constraint by 2 columns where one has a specific value
我对 UNIQUE CONSTRAINT
有疑问。
我需要添加基于 2 列的约束,其中一列需要具有特定值。
例如,假设我有一个 users
table,它包含用户,当然,主键只是一个递增的整数。
我有一个 configurations
table 除了配置列外还有两列:user_id
(users
table 的外键) 和 main
取 0/1 值。
逻辑如下:一个用户可以有多个配置,一个配置属于一个用户——如table所示。
不过,我想限制一下,让一个用户只能有一个主配置(main = 1),想过unique。
我试过了
ALTER TABLE `configurations` ADD UNIQUE `unique_main_user`(`user_id`, `main`);
但这将限制我只能使用一种主配置和一种非主配置,这很混乱。
是否可以添加 WHERE 语句或任何其他解决方案来实现此效果?
因为 MySQL allows multiple NULLs in a column with a unique constraint 您可以将 case 表达式添加到 return null 的约束中,对于除主配置以外的任何其他配置,这将允许非主配置重复,但只有一个主配置:
CREATE TABLE Configuration
(
ConfigurationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserID INT NOT NULL,
Main BIT NOT NULL,
UNIQUE (UserID, (CASE WHEN Main = 1 THEN 1 END))
);
我对 UNIQUE CONSTRAINT
有疑问。
我需要添加基于 2 列的约束,其中一列需要具有特定值。
例如,假设我有一个 users
table,它包含用户,当然,主键只是一个递增的整数。
我有一个 configurations
table 除了配置列外还有两列:user_id
(users
table 的外键) 和 main
取 0/1 值。
逻辑如下:一个用户可以有多个配置,一个配置属于一个用户——如table所示。 不过,我想限制一下,让一个用户只能有一个主配置(main = 1),想过unique。
我试过了
ALTER TABLE `configurations` ADD UNIQUE `unique_main_user`(`user_id`, `main`);
但这将限制我只能使用一种主配置和一种非主配置,这很混乱。
是否可以添加 WHERE 语句或任何其他解决方案来实现此效果?
因为 MySQL allows multiple NULLs in a column with a unique constraint 您可以将 case 表达式添加到 return null 的约束中,对于除主配置以外的任何其他配置,这将允许非主配置重复,但只有一个主配置:
CREATE TABLE Configuration
(
ConfigurationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserID INT NOT NULL,
Main BIT NOT NULL,
UNIQUE (UserID, (CASE WHEN Main = 1 THEN 1 END))
);