MySql中4种批量更新的方法

纵然是瞬间 提交于 2019-11-28 23:06:54

1、replace into 批量更新

replace into test_tbl (id,dr) values (1,'2'),(2,'3'),(x,'y');


示例:

replace into book (
    'Id',
    'Author',
    'CreatedTime',
    'UpdatedTime'
)
values 
(1,'张飞','2016-12-12 12:20','2016-12-12 12:20'),
(2,'关羽','2016-12-12 12:20','2016-12-12 12:20');


2、insert into on duplicate key update批量更新

insert into test_tbl (id,name) values (1,'a'),(2,'b'),(x,'y') on duplicate key update name=values(name);


示例:

insert into book 
(Id,Author,CreatedTime,UpdatedTime) 
values 
(1,'张飞2','2017-12-12 12:20','2017-12-12 12:21'),
(2,'关羽2','2017-12-12 12:20','2017-12-12 12:21'),
(3,'刘备','2017-12-12 12:21','2017-12-12 12:21')
on duplicate key update 
Author=values(Author),
CreatedTime=values(CreatedTime),
UpdatedTime=values(UpdatedTime);


replace into  和 insert into on duplicate key update的不同在于:

  • replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否则不小心清空大量数据可不是闹着玩的。
  • insert into 则是只update重复记录,不会改变其它字段。


3、创建临时表,先更新临时表,然后从临时表中update

create temporary table tmp(id int(4) primary key, name varchar(50));
insert into tmp values (0,'gone'), (1,'xx'),(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

注意:这种方法需要用户有temporary 表的create 权限。


4、使用mysql 自带的语句构建批量更新

注:mysql 实现批量 可以用点小技巧来实现

UPDATE t_user
SET 
age = CASE id 
    WHEN 1 THEN 23 
    WHEN 2 THEN 24 
    WHEN 3 THEN 25 
END,
name = CASE id 
    WHEN 1 THEN '张飞2' 
    WHEN 2 THEN '关羽2' 
    WHEN 3 THEN '刘备2' 
END
WHERE id IN (1,2,3)


mybatis xml示例:

<update id="update" parameterType="java.util.List">
    UPDATE dic_col_display
    SET column_code = CASE id
    <foreach collection="list" item="item" index="index" open="" separator="" close="">
        WHEN #{item.id} THEN #{item.column_code} 
    </foreach>
    END,
    modify_user_name = CASE id
    <foreach collection="list" item="item" index="index" open="" separator="" close="">
        WHEN #{item.id} THEN #{item.modify_user_name} 
    </foreach>
    END,
    modify_date = NOW()
    WHERE
      id in
      <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
          #{item.id} 
      </foreach>
</update>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!