一、MySQL中null和null不相等
MySQL中:两个值比较会出现:true、false、null 三种情况;
null和null相比较会出现未知的类型
二、然后看完这个视频
美团二面:我记得明明加了mysql唯一索引,为啥还会出现重复数据吗?有点懵。。_哔哩哔哩_bilibili
三、视频讲了两个点
①、唯一索引为null时,null和null是不相等的
②、逻辑删除时,唯一索引会冲突
视频说法有点问题,不敢苟同
问题是这样的,如下图所示:
如果4个字段都设置为唯一索引,那么①的问题就无法解决了,会同时出现多个 id|1|1|0|null 这样的数据。
也就是说使用②方案后①的问题又出现了
四、解决办法:
一开始delete_id不能为空,设置一个默认值0或1;然后逻辑删除后清空delete_id的值,使其变成null。
分割线
总感觉这个例子怪怪的,想了两天。。。我突然发现一个问题:从业务角度来讲,既然你要设置唯一索引,那这个业务上的这些个字段必然是非空的吧!既然字段是非空的,那就不存在第①种情况;但是这个例子可以解决第②种,还是有收获的