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秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值