mysql 中存在null和空时创建唯一索引的方法
好多情况下数据库默认值都有null,但是经过程序处理很多时候会出现,数据库值为空而不是null的情况。此时创建唯一索引时要注意了,此时数据库会把空作为多个重复值,而创建索引失败,示例如下:
步骤1:
mysql>selectphone,count(1)fromUsergroupbyphone;
+-----------------+----------+
|phone|count(1)|
+-----------------+----------+
|NULL|70|
||40|
|+86-13390889711|1|
|+86-13405053385|1|
步骤一中发现数据库中有70条null数据,有40条为空的数据。
步骤2:
mysql>selectcount(1)fromUserwherephoneisnull;
+----------+
|count(1)|
+----------+
|70|
+----------+
1rowinset(0.00sec)
经2再次验证数据库中null和空不一样的两个值。
步骤3:
mysql>altertableUseraddconstraintuk_phoneunique(phone);
ERROR1062(23000):Duplicateentry''forkey'uk_phone'
此时创建索引提示‘'为一个重复的属性。
步骤4:将所有的空值改成null
mysql>updateUsersetphone=NULLwherephone='';
QueryOK,40rowsaffected(0.11sec)
Rowsmatched:40Changed:40Warnings:0
步骤5:再次创建唯一索引
mysql>altertableUseraddconstraintuk_phoneunique(phone);
QueryOK,0rowsaffected(0.34sec)
Records:0Duplicates:0Warnings:0
创建成功,OK了