大批量数据,用mysql批量更新数据的四种方法

嚴華  金牌会员 | 2024-7-31 09:04:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 854|帖子 854|积分 2562

建一个测试表
  1. create table users
  2. (
  3.     id   int auto_increment
  4.         primary key,
  5.     name varchar(255) null,
  6.     age  int          null
  7. );
复制代码
1 replace into 批量更新【审慎用】
  1. /**
  2.   没有就新增,id一样,就修改
  3.   特别注意:每列数据都要写上,不然就会设为null,你就惨了
  4. */
  5. replace into users (id,name,age) values (1,'aa',20),(2,'bb',30),(3,'cc',40);
  6. /* 找死 */
  7. replace into users (id,age) values (1,21),(2,31),(3,41);
  8. /* 正确写法 */
  9. replace into users (id,name,age) values (1,'aa',21),(2,'bb',31),(3,'cc',41);
复制代码
2 insert into ...on duplicate key update批量更新
  1. /**
  2.   执行第一次:(首次数据库表中没有数据,正常插入)
  3. */
  4. insert into users (id,name,age) values (1,'aa',20),(2,'bb',30),(3,'cc',40)
  5. on duplicate key update age=age+1;
  6. /**
  7.   没有就新增,id一样,就修改,age 列都加1
  8. */
  9. insert into users (id) values (1),(2),(3)
  10. on duplicate key update age=age+1;
  11. /**
  12.   将 name 从 'aa' ,改为 'aa-1',
  13.   age加1
  14. */
  15. insert into users (id,name) values (1,'aa-1'),(2,'bb-1'),(3,'cc-1')
  16. on duplicate key update name=values(name) ,age=age+1;
  17. /**
  18.   将 name 从 ‘aa-1’ 改为 'xiaowang'
  19.   age 改为 10 ,以此类推
  20. */
  21. insert into users (id,name,age) values (1,'xiaowang',10),(2,'xiaoming',15),(3,'xiaochen',20)
  22. on duplicate key update name=values(name),age=values(age);
复制代码
3 创建临时表,先更新临时表,然后从临时表中update
  1. /**
  2.   创建临时表[session级别的,所以另开个窗口看不见],先更新临时表,然后从临时表中联表update
  3. */
  4. create temporary table users_temp
  5. select * from users;
  6. select * from users_temp;
  7. /* 修改临时表 */
  8. update users_temp set age=age+1;
  9. /*
  10. 修改正式表的记录
  11. set位置,正式表要在前面
  12. */
  13. update users,users_temp set users.age=users_temp.age where users.id=users_temp.id;
  14. drop table users_temp;
复制代码
4 使用mysql 自带的语句构建批量更新 [数据控制在1w以内]
  1. update users set age=age+1 where id in (1,2,3);
  2. /**
  3.   建议将修改记录条数控制在1W左右,不要超过2W,否则会耗费的时间也是成倍增加的
  4. */
  5. update users
  6. set name = case id
  7.     when 1 then '小刚'
  8.     when 2 then '小明'
  9.     when 3 then '小陈'
  10.     else name
  11. end ;
  12. update users
  13. set name = case id
  14.                when 1 then '小刚-1'
  15.                when 2 then '小明-1'
  16.                else name
  17.     end
  18. where id in (1,2,3) ;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表