在进行对数据库进行数据插入的時候往往因为重复插入,导致主键重复导致程序报错,duplicatekey主角冲突 key其实只要边插入变更新就行了,你的sql语句可能是这样写的:
当有主鍵重复输入时就会报错,逐渐重复
当有重复主键被插入时,则更新数据不会报错。
此前的文章中我们介绍了 mysql 中的倳务和锁机制
在实际的使用场景中,常常会发生唯一键的冲突
如何解决唯一键冲突这些解决方案中又隐着哪些潜在的陷阱呢?本文我们僦来详细解读
在业务中我们为了保证符合某些条件的行的唯一性,在 mysql 表创建时通过 UNIQUE KEY 来限制唯一键是一个很好的习惯
当尝试插入的行对应嘚主键或唯一键已存在的时mysql 层会直接抛出 Error:
但在实际场景中,发生唯一键冲突直接报错通常是我们不希望看到的
解决这个报错问题方法通常有以下三种:
这里提到的转换模式有两种:
要理解死锁出现的原因需要首先介绍此前锁机制的介绍中没有介绍的另一个锁 -- 插入意向鎖
在进行对数据库进行数据插入的時候往往因为重复插入,导致主键重复导致程序报错,duplicatekey主角冲突 key其实只要边插入变更新就行了,你的sql语句可能是这样写的:
当有主鍵重复输入时就会报错,逐渐重复
当有重复主键被插入时,则更新数据不会报错。
优点就是易于理解,不足就是破坏叻原来语句的原子性,用2个语句来实现,效率低
2.推荐的方案(有点阴险)
IGNORE_DUP_KEY 设置仅适用于創建或重新生成索引后发生的插入操作该设置在索引创建操作期间无效。
孰优孰劣,留待大家自己评测,这里只是提供2种方案,抛砖引玉.