MySQL主键值不允许为NULL,为什么唯一索引值允许为NULL
众所周知,主键是唯一标识一行数据的KEY,并且主键值不能为NULL。
但是同样是唯一标识一行数据的唯一索引却允许值为NULL,看起来似乎有些费解。
根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。
根据这个定义,多个NULL值的存在不违反唯一约束,所以是合理的。
执行以下SQL语句
SELECT IF(NULL=NULL,1,2);
结果输出2,表示NULL不等于NULL。
所以当唯一索引值存在NULL时,查询的时候结果不唯一,破坏了唯一性。
总结如果不是业务需要(例如某个字段暂时未能获得),应该使索引值不为NULL,以保证查询结果的唯一性。