2016-04-27 2 views
1

Я пытаюсь сделать имена уникальными для авторов. Но если я попытаюсь,MySQL Уникальный ключ для большего количества столбцов не работает

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 

Почему имена с нулем не считается?

Как сделать его уникальным даже для примера 1?

ответ

1

Вместо NULL, используйте пустую строку (''), так что ваш DML становится,

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

Нулевое неизвестна MySql, по этой причине нам нужен этот путь. Спасибо, если кто-то приложил все усилия, но не мог ответить.

2

Как правило, «нет нулевого эквивалента другому null», поэтому в вашем случае это приемлемо. Это дизайн для крупных db.

Вы можете проверить следующие ссылки:

  1. Oracle
  2. Postgres
Смежные вопросы