MySql复合键和空值

时间:2010-06-21 16:15:46

标签: sql mysql null unique

我注意到如果我有两列(column_a和column_b)的唯一复合键,那么如果一列为null,我的sql会忽略此约束。

E.g。

如果column_a = 1且column_b = null我可以按照我喜欢的方式插入column_a = 1和column_b = null

如果column_a = 1且column_b = 2,我只能插入一次该值。

有没有办法应用这个约束,除了可能将列更改为Not Null并设置默认值?

1 个答案:

答案 0 :(得分:16)

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

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

所以,不,你不能让MySQL将NULL视为唯一值。我想你有几个选择:你可以在你的问题中做你建议的并存储一个“特殊值”而不是null,或者你可以使用BDB引擎作为表。我不认为这种微小的行为差异可能会使存储引擎做出不同寻常的选择。