我有一个表users
,其中包含以下列和属性
users (
id int(11),
ssn varchar(100),
foreigner tinyint(1) default 0
)
外国人的值是0,默认值为1 当检查的外国人值为0时,如何在ssn列上创建唯一索引。
id ssn foreigner
1 55 0 true
2 60 1 true
3 60 1 true
----------------------------------
4 55 0 false
----------------------------------
5 77 0 true
答案 0 :(得分:1)
在MySQL中,只有使用最新版本的MySQL才能在没有触发器的情况下执行此操作。
create table users (
id int(11),
ssn varchar(100),
foreigner tinyint(1) default 0,
foreigner_ssn tinyint generated always as (case when foreigner = 0 then ssn end) store unique
);
这将创建一个新生成的列。 MySQL唯一索引重复NULL
值,因此条件实际上仅在foreigner = 0
上。
您可以简化此过程,只需在ssn
时将NULL
设为foreigner = 0
,然后将其声明为unique
。