`
zhaohaolin
  • 浏览: 984231 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql 批量update

阅读更多

我们都知道在MySQL中批量insert的速度会比一条条insert快很多。类似的,update也应该是如此,但因为update的值往往因为条件的不同而不同,只能分开做。
但是在下面的情况下,批量的update是可以做到的。
1. 查询的条件中有主键或唯一键
2. 查询的条件是等于,而不是范围。这实际上包含了1的情况

在1的情况下,可以使用
replace 或者 insert into ... values ... on duplicate key update ...
两者都是在键重复的情况下自动的做更新,但需要注意的是,键不存在的时候会做insert操作。

在2的情况下,可以建一张临时表,把要更新的值插入临时表,然后和需要更新的表连接做update
如:

+-------------+------------------+------+-----+-------------------+
| Field       | Type             | Null | Key | Default           |
+-------------+------------------+------+-----+-------------------+
| id          | int(11)          | NO   | PRI | NULL              |
| name        | varchar(30)      | YES  |     | NULL              |
| email       | varchar(40)      | YES  |     | NULL              |
| address     | varchar(50)      | YES  |     | NULL              |
| age         | int(10) unsigned | YES  |     | NULL              |
| regist_time | timestamp        | NO   |     | CURRENT_TIMESTAMP |
+-------------+------------------+------+-----+-------------------+


要按照id更新name
两种方法分别为

insert into user (id,name) values (?,?),(?,?) on duplicate key update name = values(name)

 


 

create temporary table tmp (id int primary key, n varchar(20));
insert into tmp values (?,?),(?,?);
update user, tmp set user.name = tmp.n where user.id = tmp.id;


这样当user的数据量是10万,更新2万的时候,包括必要的程序时间,一条条更新需要1.7秒,方法1需要0.30秒,方法2需要0.26秒。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics