Mysql批量更新的一种很少见但很快的方式

相信朋友们来到这里,都被批量更新搞的很烦。因为数据量增大,处理时间甚至可以说指数增长。在mybatis里面用foreach其实效果并不好。当需要更新的数据条数很多时,程序响应会变得非常慢。那我无意中学习到了一种非常小众的写法的语句。但亲身测试之后效果却非常好。出于一些原因就不展示我的代码了,只写一个小的demo供大家参考。

建表语句如下

 CREATE TABLE `customer` (
  `id` BIGINT(16) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `customer_code` VARCHAR(32) DEFAULT NULL COMMENT '客户code',
  `customer_name` VARCHAR(64) DEFAULT NULL COMMENT '客户名称',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

表数据如下

 

批量更新语句如下

 UPDATE `customer` cu JOIN 
(
SELECT 1 AS id, '10001' AS customer_code, 'kimi' AS customer_name
UNION 
SELECT 2 AS id, '10002' AS customer_code, 'max' AS customer_name
UNION 
SELECT 3 AS id, '10003' AS customer_code, 'timo' AS customer_name
UNION 
SELECT 4 AS id, '10004' AS customer_code, 'checo' AS customer_name
) un USING(id, customer_code)
SET cu.customer_name = un.customer_name;

由于使用的是某云服务器而非公司服务器,语句执行时间0.0几秒

 

执行后的效果如下

这种方式最牛掰的地方在于。数据量越大,他的性能优势越明显。 

拜拜

下面是参考的资料

资料地址,侵删

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值