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

MySQL Unique Key for more columns not working

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

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 也是唯一的?

使用空字符串 ('') 而不是 NULL,这样您的 DML 就变成了

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

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

通常 'no null is equivalent to another null',因此您的情况是可以接受的。这是主要数据库的设计。

您可以查看以下链接:

  1. Oracle
  2. Postgres