|
建一个测试表- create table users
- (
- id int auto_increment
- primary key,
- name varchar(255) null,
- age int null
- );
复制代码 1 replace into 批量更新【谨慎用】- /**
- 没有就新增,id一样,就修改
- 特别注意:每列数据都要写上,不然就会设为null,你就惨了
- */
- replace into users (id,name,age) values (1,'aa',20),(2,'bb',30),(3,'cc',40);
- /* 找死 */
- replace into users (id,age) values (1,21),(2,31),(3,41);
- /* 正确写法 */
- replace into users (id,name,age) values (1,'aa',21),(2,'bb',31),(3,'cc',41);
复制代码 2 insert into ...on duplicate key update批量更新- /**
- 执行第一次:(首次数据库表中没有数据,正常插入)
- */
- insert into users (id,name,age) values (1,'aa',20),(2,'bb',30),(3,'cc',40)
- on duplicate key update age=age+1;
- /**
- 没有就新增,id一样,就修改,age 列都加1
- */
- insert into users (id) values (1),(2),(3)
- on duplicate key update age=age+1;
- /**
- 将 name 从 'aa' ,改为 'aa-1',
- age加1
- */
- insert into users (id,name) values (1,'aa-1'),(2,'bb-1'),(3,'cc-1')
- on duplicate key update name=values(name) ,age=age+1;
- /**
- 将 name 从 ‘aa-1' 改为 'xiaowang'
- age 改为 10 ,以此类推
- */
- insert into users (id,name,age) values (1,'xiaowang',10),(2,'xiaoming',15),(3,'xiaochen',20)
- on duplicate key update name=values(name),age=values(age);
复制代码 3 创建临时表,先更新临时表,然后从临时表中update- /**
- 创建临时表[session级别的,所以另开个窗口看不见],先更新临时表,然后从临时表中联表update
- */
- create temporary table users_temp
- select * from users;
- select * from users_temp;
- /* 修改临时表 */
- update users_temp set age=age+1;
- /*
- 修改正式表的记录
- set位置,正式表要在前面
- */
- update users,users_temp set users.age=users_temp.age where users.id=users_temp.id;
- drop table users_temp;
复制代码 4 使用mysql 自带的语句构建批量更新 [数据控制在1w以内]- update users set age=age+1 where id in (1,2,3);
- /**
- 建议将修改记录条数控制在1W左右,不要超过2W,否则会耗费的时间也是成倍增加的
- */
- update users
- set name = case id
- when 1 then '小刚'
- when 2 then '小明'
- when 3 then '小陈'
- else name
- end ;
- update users
- set name = case id
- when 1 then '小刚-1'
- when 2 then '小明-1'
- else name
- end
- where id in (1,2,3) ;
复制代码 总结
到此这篇关于大批量数据用mysql批量更新数据的4种方法总结的文章就介绍到这了,更多相关mysql批量更新数据方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://www.jb51.net/database/320613fzb.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|