mysql on duplicate key update 使用小结

insert into xxx on duplicate key update xxx=xxx语句,解决插入数据时产生的重复主键问题,前提是设置了正确的unique key。

相当于完成的操作:

if not exists (select 。。。。。。)
      insert into 。。。。。。
else
      update 。。。。。。


说明:

   1、on duplicate key update 支持在INSERT语句中有存在主键或者唯一索引的列,相应的数据在表中存在会执行更新操作,否则执行插入操作。

当然不论是否更新主键或唯一索引,这两种字段在表中数据都不允许重复。

  2、on duplicate key update在数据量不大,并且duplicate key不多的情况下,性能良好,但若是存在较多的duplicate key时,性能会大打折扣。

    解决方案要根据实际场景来定:
    a、可以先update 然后再insert ignore操作,拆解成多步

    b、可以使用类似insert ...... select ....where not exist 等方式,拆解成多步

 3、在表中存在多个唯一索引或存在并发事务的情况下,避免使用此方式,避免数据库产生死锁death lock

posted @ 2021-06-24 16:00  xuzhujack  阅读(906)  评论(2编辑  收藏  举报
;