MySQL:Innodb唯一索引出现重复值的场景分析
最近遇到类似案例,这里将可能出现这种情况的2个场景描述一下,其中一种情况在翻看老叶的公众号有类似文章,如下,
- 故障案例:MySQL唯一索引有重复值,官方却说This is not a bug https://mp.weixin.qq.com/s/s7aHwtZXYBEqOIEO6F7O2w
我们分别描述。
场景1 unique_checks = 0
原理
当我们进行数据插入的时候,对于唯一索引,实际上大概会经历数据查找,唯一性检查、数据插入 3个阶段。而对于普通索引来讲如果page不在buffer pool中则可能在数据查找阶段就会写入到ibuff,这种情况就等待后续的ibuff合并即可。
但是我们一旦设置了unique_checks=0,对于唯一索引(非主键)而言也可能走普通索引的方式,我们大概看看是如何改变的,首先根据设置,事务检查唯一索引的标记会设置为如下,
trx->check_unique_secondary =<br> !thd_test_options(thd, OPTION_RELAXED_UNIQUE_CHECKS);<br>