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或任何日期。
答案 0 :(得分:4)
UNIQUE索引创建一个约束,以便索引中的所有值 必须是截然不同的如果您尝试使用a添加新行,则会发生错误 与现有行匹配的键值。此约束不适用 除了BDB存储引擎之外的NULL值。对于其他引擎,a UNIQUE索引允许可以包含的列的多个NULL值 NULL。
以上摘自MySQL 5.0。 MySQL在5.1.12中删除了BDB存储引擎。 现在来自最新的documentation:
对于所有引擎,UNIQUE索引允许包含NULL的列的多个NULL值。如果为UNIQUE索引中的列指定前缀值,则列值在前缀中必须是唯一的。