mysql批量更新数据List>

一、前言

最近因为业务需求需要对数据库进行数据批量更新,常规的sql更新语句:UPDATE tableName SET columnName = value WHERE columnName = value;一次只能更新一条数据,不能达到批量操作的需求。

在业务层一般做法是利用for循环依次单个插入,需要多次访问数据库更新语句,消耗资源的同时也容易引发事务的问题。

网上查了下资料,有以下两种方式容易实现(借用批量插入达到更更新):

  • replace into
  • INSERT ... ON DUPLICATE KEY UPDATE

1.replace into

REPLACE INTO demo(title,uid) VALUES ('1234657','1003');

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

批量操作:
replace into demo(id,dr) values (1,'2'),(2,'3'),...(x,'y');

只有当更新所有字段时采用此方法,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否容易清空大量数据。

2.INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO demo(a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=4;

想对于replace into来说,这种方式只更新后端提供的数据,不会改变其它字段。

批量操作:
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE c=VALUES(c);
mybatis下使用

        INSERT INTO t1 (a,b,c) 
        values
        
            (#{item.a},#{item.b},#{item.c})
        
        ON DUPLICATE KEY UPDATE c=values(c),b=values(b)
 

注:update 后的不是条件,而且实际需要更新的字段

参考:https://www.jianshu.com/p/78ea17c6d190

你可能感兴趣的:(mysql批量更新数据List>)