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',因此您的情况是可以接受的。这是主要数据库的设计。
您可以查看以下链接:
我正在尝试让作者的名字独一无二。但如果我尝试,
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',因此您的情况是可以接受的。这是主要数据库的设计。
您可以查看以下链接: