【问题标题】:MySql compound keys and null valuesMySql 复合键和空值
【发布时间】:2011-03-06 09:49:16
【问题描述】:

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

例如

如果 column_a=1 和 column_b = null 我可以随意插入 column_a=1 和 column_b=null

如果 column_a=1 和 column_b = 2 我只能插入这个值一次。

除了将列更改为 Not Null 并设置默认值之外,还有其他方法可以应用此约束吗?

【问题讨论】:

    标签: sql mysql null unique


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢锤子!是的,存储一个特殊的值不会有太大的伤害,而且对我来说绝对是比更改存储机制更好的选择。
    猜你喜欢
    • 2018-06-28
    • 2013-03-05
    • 1970-01-01
    • 2016-07-04
    • 2013-03-19
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    相关资源
    最近更新 更多