博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 批量更新多条记录(且不同值)的实现方法
阅读量:5906 次
发布时间:2019-06-19

本文共 1036 字,大约阅读时间需要 3 分钟。

hot3.png

mysql更新语句很简单,更新多条数据的某个字段为相同值,一般这样写:

UPDATE table_name SET field = 'value' WHERE condition;

更新多条数据为不同值,你可以: 

foreach ($display_order as $id => $ordinal) {     $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";     mysql_query($sql); }

这样一条条进行,虽然性能差,还容易阻塞。

你也可以用一些SQL的小技巧:

UPDATE table_name     SET field = CASE id         WHEN 1 THEN 'value'        WHEN 2 THEN 'value'        WHEN 3 THEN 'value'    ENDWHERE id IN (1,2,3);

然而这样在记录量很大的情况下仍然性能很差,然后我们考虑使用:

REPLACE INTO table_name (id,data) VALUES (1,'2'),(2,'3'),...(x,'y');INSERT INTO table_name (id,data) VALUES (1,'2'),(2,'3'),...(x,'y') ON DUPLICATE KEY UPDATE data=VALUES(data);

REPLACE INTO 操作本质是对重复的记录先 DELETE 后 INSERT,如果更新的字段不全会将缺失的字段置为缺省值;

INSERT INTO 则是只更新重复记录,不会改变其它字段。

如果这样性能仍显不足,我们还可以通过创建临时表来再次提速:

create temporary table tmp(id int(4) primary key,dr varchar(50));insert into tmp values  (0,'gone'), (1,'xx'),...(m,'yy');update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

创建临时表,更新临时表,从临时表更新。

转载于:https://my.oschina.net/tridays/blog/424712

你可能感兴趣的文章
linux 环境RPM 安装MYSQL5.6
查看>>
Linux文件管理和编辑常用命令
查看>>
bluz-5.47 蓝牙
查看>>
C++ 读写文件
查看>>
海外旅游最常用的100句英语口语
查看>>
http协议进阶(五)连接管理
查看>>
服务器创建好后怎样使用远程连接工具链接的一些问题
查看>>
插件~NuGet与packages管理项目的包包
查看>>
linux卸载nomachine,NoMachine 安装与配置及使用
查看>>
企业shell常见面试题及企业实战案例深入浅出讲解
查看>>
nginx js、css多个请求合并为一个请求(concat模块)
查看>>
mybatis实战教程(mybatis in action)之五:与spring3集成
查看>>
解决浏览器Adobe Flash Player不是最新版本问题
查看>>
SQLite 约束
查看>>
Python爬虫学习——使用Cookie登录新浪微博
查看>>
linux配置网络
查看>>
vsftp 500 OOPS: cannot change directory:/home/xyp
查看>>
MVC ---- EF的安装于卸载
查看>>
WebRTC 学习之 概念总结
查看>>
Java对ad操作
查看>>