项目中遇到的问题

文章探讨了在数据库中遇到的问题,包括唯一索引在包含NULL值时的失效,导致数据重复,以及逻辑删除对唯一索引的影响。提出了两种解决方案:1) 修改删除状态字段策略;2) 添加时间戳字段。还提到了开发库和测试库建库语句的不同,以及MySQL分页查询策略。此外,介绍了ELK日志管理和缓存清除接口。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值