首页 > 数据库技术 > 详细

MySql中4种批量更新的方法

时间:2019-08-30 00:59:13      阅读:125      评论:0      收藏:0      [点我收藏+]

1、replace into 批量更新

replace into test_tbl (id,name) values (1,'a'),(2,'b'),(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>

MySql中4种批量更新的方法

原文:https://www.cnblogs.com/kancy/p/11432767.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!