创建唯一索引多个列,其中一列为零

时间:2018-11-15 11:43:31

标签: mysql sql database

我有一个表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 

1 个答案:

答案 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