MySQL: UNIQUE, but DEFAULT NULL - allowed by creating of table. More than 1 NULL is allowed to insert. Why?
我刚刚检查了一下,虽然它同时是UNIQUE KEY,但允许创建一个默认列为NULL的表:
1 2 3 4 |
据我了解,它看起来很奇怪,没有太多意义。 我期望第二次插入
将失败。
但是,它插入第一个,第二个,第三个NULL值没有任何问题。 谁能解释一下如果表中已经有NULL的原因,为什么它会插入第二和第三列?
这是一个理论上的问题(因为我知道在大多数情况下没有人会在同一列上使用DEFAULT NULL + UNIQUE KEY),但是我想了解为什么一旦该列中已经有一个NULL却不抛出错误。 我在声明唯一列时做错什么了吗?
谢谢。
根据SQL 92规范(及其阅读方式),唯一约束旨在表示候选键,因此不应允许重复值或NULL值。 DB2以这种方式实现其唯一约束。 多家数据库供应商(包括MySQL)将规范视为忽略NULL值,就像Group By子句忽略NULL值一样,因此它们实现了唯一的约束,因此仅适用于非NULL值。 还有一些,将NULL当作自己的特殊值,并且只允许输入一个为NULL的条目。 Microsoft SQL Server通过这种方式实现了唯一的约束。 所有供应商在唯一性约束方面唯一一致的方面是非NULL值必须唯一。
因为