【问题标题】:MySQL Unique Key for more columns not working更多列的 MySQL 唯一键不起作用
【发布时间】:2016-04-27 09:30:20
【问题描述】:

我正在尝试使名称对作者来说是独一无二的。但如果我尝试,

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,如何使其独一无二?

【问题讨论】:

    标签: mysql null unique multiple-columns


    【解决方案1】:

    通常'没有空值等于另一个空值',所以在你的情况下这是可以接受的。这是主要数据库的设计。

    您可以查看以下链接:

    1. Oracle
    2. Postgres

    【讨论】:

      【解决方案2】:

      用空字符串('')代替NULL,这样你的DML就变成了,

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

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

      【讨论】:

        猜你喜欢
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多