1.mysql8的一张innodb引擎的表中,加了唯一索引,但最后发现数据竟然还是重复了。根据分类编号、单位编号和商品组属性的hash值,可以唯一确定一个商品组。给商品组防重表创建了唯一索引之后,第二天查看数据,发现该表中竟然产生了重复的数据。
原因:唯一索引字段包含null,如果唯一索引的字段中,出现了null值,则唯一性约束不会生效。特别注意:创建唯一索引的字段,都不能允许为null,否则mysql的唯一性约束可能会失效。
当model_hash字段不为空时,不会产生重复的数据。
当model_hash字段为空时,会生成重复的数据。
逻辑删除表加唯一索引:唯一索引非常简单好用,但有时候,在表中它并不好加。
物理删除delete语句操作:
delete from product where id=123;
逻辑删除,主要是通过update语句操作的:
update product set delete_status=1,edit_time=now(3) where id=123;
逻辑删除需要在表中额外增加一个删除状态字段,用于记录数据是否被删除。在所有的业务查询的地方,都需要过滤掉已经删除的数据。
通过这种方式删除数据之后,数据任然还在表中,只是从逻辑上过滤了删除状态的数据而已,但其实对于这种逻辑删除的表,是没法加唯一索引的。
场景:
假设之前给商品表中的name