mysql 批量更新的四种方法
批量更新的方法:
1 ) 逐条更新
代码如下:
UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';
如果更新同一字段为同一个值,mysql也很简单,修改下where即可:
代码如下:
UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values');
那如果更新多条数据为不同的值,可能很多人会这样写:
foreach ($display_order as $id => $ordinal) {
$sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
mysql_query($sql);
}
即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很容易造成阻塞。
那么能不能一条sql语句实现批量更新呢?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。
2)使用case when then
UPDATE mytable
SET myfield = CASE id
WHEN THEN 'value'
WHEN THEN 'value'
WHEN THEN 'value'
END
WHERE id IN (,,)
这里使用了case when 这个小技巧来实现批量更新。
UPDATE categories
SET display_order = CASE id
WHEN THEN
WHEN THEN
WHEN THEN
END
WHERE id IN (,,)
这句sql的意思是,更新display_order 字段,如果id=1 则display_order 的值为3,如果id=2 则 display_order 的值为4,如果id=3 则 display_order 的值为5。
即是将条件语句写在了一起。这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。
如果更新多个值的话,只需要稍加修改:
UPDATE categories
SET display_order = CASE id
WHEN THEN
WHEN THEN
WHEN THEN
END,
title = CASE id
WHEN THEN 'New Title 1'
WHEN THEN 'New Title 2'
WHEN THEN 'New Title 3'
END
WHERE id IN (,,)
到这里,已经完成一条mysql语句更新多条记录了。
$display_order = array(
=> ,
=> ,
=> ,
=> ,
=> ,
=> ,
=> ,
=>
);
$ids = implode(',', array_keys($display_order));
$sql = "UPDATE categories SET display_order = CASE id ";
foreach ($display_order as $id => $ordinal) {
$sql .= sprintf("WHEN %d THEN %d ", $id, $ordinal);
}
$sql .= "END WHERE id IN ($ids)";
echo $sql;
这个例子,有8条记录进行更新。代码也很容易理解,你学会了吗
3)使用replace into
replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');
首先判断数据是否存在; 如果不存在,则插入;.如果存在,则更新。可以通过这个函数进行多次更新
注意:假如表中的一个旧记录与一个用于PRIMARY
KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该
语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
4)创建临时表,先更新临时表,然后从临时表中update
代码如下 复制代码
create temporary table tmp(id int() primary key,dr varchar());
insert into tmp values (,'gone'), (,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;
注意:这种方法需要用户有temporary 表的create 权限。
mysql 批量更新的四种方法的更多相关文章
- c#mysql批量更新的两种方法
总体而言update 更新上传速度还是慢. 1: 简单的insert 速度稍稍比MySqlDataAdapter慢一点 配合dapper 配置文件 <?xml version="1 ...
- mysql批量更新的两种方式效率试验<二>
Mysql两种批量更新的对比 简介: mysql搭载mybits框架批量更新有两种方式,一种是在xml中循环整个update语句,中间以‘:’隔开,还有一种是使用case when 变相实现批量更新, ...
- mybatis学习之路----批量更新数据两种方法效率对比
原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...
- mysql批量update的两种方法
today a question let me happy(抓狂) 头儿分了一个小任务,让修改循环调用dao层的那些不啦不啦不啦,鉴于之前写过批量更新的玩意,so 很快代码就修改完了,but 测的时候 ...
- Mysql批量更新的三种方式
前言 批量插入由于mysql的VALUES原生支持,使用较为便利. 批量更新的写法一般有三种,在更新数量较少的情况下,前两种性能不相上下.但是在更新字段增加,更新条数较多(500以上)建议使用第三种写 ...
- mysql -- 模糊查询的四种方法
摘录自:http://www.jb51.net/article/48315.htm 1 %:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 ...
- mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法
[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...
- mysql 批量更新与批量更新多条记录的不同值实现方法
批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = ...
- mysql 批量更新与批量更新多条记录的不同值实现方法
作者: 字体:[增加 减小] 类型:转载 时间:2013-10-02 我要评论 在mysql中批量更新我们可能使用update,replace into来操作,下面小编来给各位同学详细介绍mysql ...
随机推荐
- Git----时光穿梭机之撤销修改05
自然,你是不会犯错,不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行: $ cat readme.txtGit is a distributed version cont ...
- nginx错误页面重定向
一.Nginx错误页面优雅显示的原因? 当我们访问网站时,由于特殊的原因,经常会出现诸如403,404,503等错误,这极大的影响用户的访问体验,所以我们很有必要做一下错误页面的优雅显示,以提升用 ...
- LUA中相同签名函数覆盖
function test() print('test')end function test() print('test22222')end test() --输出test2222
- java.io.CharConversionException: Not an ISO 8859-1 character:
java.io.CharConversionException: Not an ISO 8859-1 character: XXX 这个问题可能是因为outputstream输出中文字造成的影响. r ...
- 安装nvidia driver
ubuntu16.04 下载地址 http://www.nvidia.com/Download/index.aspx dpkg -i nvidia-diag-driver-local-repo-ubu ...
- Pollard Rho因子分解算法
有一类问题,要求我们将一个正整数x,分解为两个非平凡因子(平凡因子为1与x)的乘积x=ab. 显然我们需要先检测x是否为素数(如果是素数将无解),可以使用Miller-Rabin算法来进行测试. Po ...
- iOS对HTTPS证书链的验证原理
今天看到所在的某个开发群问https原理,之前做HTTPS ,下面简单说下原理.希望能帮助你理解. HTTPS从最终的数据解析的角度,与HTTP相同.HTTPS将HTTP协议数据包放到SSL/TSL层 ...
- 如何快速简单粗暴地理解Python中的if __name__ == '__main__'
1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...
- 利用WKWebView实现js与OC交互注意事项
最近在写一些关于wkwebview的一些代码,发现了几点心得,记录一下. 1.js调用OC 我是利用wkwebview进行的开发实现,主要代码有三部分 1.向config注入OC对象 [config. ...
- 15 Independent Alleles
Problem Figure 2. The probability of each outcome for the sum of the values on two rolled dice (blac ...