2016-04-27 11 views
1

Ich versuche, Namen für die Autoren einzigartig zu machen. Aber wenn ich versuche,MySQL Unique Key für mehr Spalten funktioniert nicht

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); 

Beispiel 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 

Wenn ich geben alle drei Namensteile, es funktioniert gut.

Beispiel 2:

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

Warum Namen mit null wird nicht in Betracht gezogen?

Wie wird es sogar für Beispiel 1 einzigartig gemacht?

Antwort

1

Statt NULL verwenden leere Zeichenfolge (''), so dass Ihre DML,

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

wird Mit null auf MySql unbekannt ist, aus diesem Grund müssen wir auf diese Weise. Danke, wenn sich jemand Mühe gab, aber nicht antworten konnte.

2

Im Allgemeinen 'no null ist gleichbedeutend mit einem anderen null', in Ihrem Fall ist dies akzeptabel. Dies ist ein Design für große db's.

Sie können auf die folgenden Links überprüfen:

  1. Oracle
  2. Postgres