MySQL主键值不允许为NULL,为什么唯一索引值允许为NULL

Published on:
Tags: mysql

众所周知,主键是唯一标识一行数据的KEY,并且主键值不能为NULL。

但是同样是唯一标识一行数据的唯一索引却允许值为NULL,看起来似乎有些费解。
根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。
根据这个定义,多个NULL值的存在不违反唯一约束,所以是合理的。

执行以下SQL语句
SELECT IF(NULL=NULL,1,2);
结果输出2,表示NULL不等于NULL。

所以当唯一索引值存在NULL时,查询的时候结果不唯一,破坏了唯一性。

总结如果不是业务需要(例如某个字段暂时未能获得),应该使索引值不为NULL,以保证查询结果的唯一性。