MySQL唯一键,更多列不起作用

时间:2016-04-27 09:30:21

标签: mysql null unique multiple-columns

我试图让作者的名字独一无二。但是,如果我尝试,

create table author(author_id int auto_increment primary key, firstname varchar(20), middlename varchar(20), lastname varchar(20)) auto_increment = 1001;
alter table author add unique(firstname, middlename, lastname);

示例1:

insert into author(firstname, middlename, lastname) values('Alice',null,null);
insert into author(firstname, middlename, lastname) values('Alice',null,null);

select * from author;

1001 | Alice     | NULL       | NULL
1002 | Alice     | NULL       | NULL

如果我给出所有三个名称部分,它就可以正常工作。

示例2:

insert into author(firstname,middlename,lastname) values('Alice','Bob','Charlie');
insert into author(firstname,middlename,lastname) values('Alice','Bob','Charlie');
>> Error...Duplicate

为什么不考虑带null的名称?

即使对于示例1,如何使其独一无二?

2 个答案:

答案 0 :(得分:3)

通常'no null等同于另一个null',所以在你的情况下这是可以接受的。这是主要数据库的设计。

您可以查看以下链接:

  1. Oracle
  2. Postgres

答案 1 :(得分:1)

而不是NULL,使用空字符串(''),以便您的DML变为,

insert into author(firstname, middlename, lastname) values('Alice','','');
insert into author(firstname, middlename, lastname) values('Alice','','');
>> Error: Duplicate Entry

MySql不知道null,因此我们需要这种方式。谢谢,如果有人努力但无法回答。