2016-04-27 12 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:私はすべての3つの名前の部分を与える場合

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、空の文字列( '')を使用し、ヌルを持つ

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

は、我々はこの方法を必要とする理由は、MySQLに不明である、あなたのDMLになるように。誰かが努力したが、答えられなかった場合はありがとう。

2

一般的に、「nullは別のnullと等しくありません。」という場合がありますので、これは問題ありません。これはメジャーなデータベースのための設計です。

あなたは以下のリンクをチェックすることができます

  1. Oracle
  2. Postgres
関連する問題