mysql中的多个唯一不支持NULL

时间:2011-07-27 21:42:02

标签: mysql unique

ALTER TABLE admins ADD CONSTRAINT uc_EmailandDeleted_at UNIQUE (email,deleted_at);

我已将我的表格更改为:

ID  EMAIL                  DELETED_AT  
1.  user@example.com          NULL             <- accept  
2.  user@example.com          NULL             <- reject because of uniqueness.

但它不按我的意愿工作。如果我给两个相同的日期

deleted_at
它会产生错误,正如我所料。但不适用于NULL值。有什么想法?

注意:我无法更改deleted_at列的行为,因为我使用的是acts_as_paranoid。所以我必须将deleted_at字段保留为NULL或任何日期。

1 个答案:

答案 0 :(得分:4)

来自the documentation

  

UNIQUE索引创建一个约束,以便索引中的所有值   必须是截然不同的如果您尝试使用a添加新行,则会发生错误   与现有行匹配的键值。此约束不适用   除了BDB存储引擎之外的NULL值。对于其他引擎,a   UNIQUE索引允许可以包含的列的多个NULL值   NULL。

以上摘自MySQL 5.0。 MySQL在5.1.12中删除了BDB存储引擎。 现在来自最新的documentation

  

对于所有引擎,UNIQUE索引允许包含NULL的列的多个NULL值。如果为UNIQUE索引中的列指定前缀值,则列值在前缀中必须是唯一的。