没有合适的资源?快使用搜索试试~ 我知道了~
首页mysql批量更新多条记录的同一个字段为不同值的方法
mysql批量更新多条记录的同一个字段为不同值的方法
3 下载量 34 浏览量
更新于2023-03-16
评论
收藏 57KB PDF 举报
最近在工作的时候突然想到了一个问题,就是mysql如何才能实现批量更新多条记录的同一个字段为不同值,于是就动手实践起来了,发现其中的学问还是挺多的,所以想着就总结下来分享给大家,有需要的朋友们可以参考借鉴,下面来一起看看吧。
资源详情
资源评论
资源推荐
mysql批量更新多条记录的同一个字段为不同值的方法批量更新多条记录的同一个字段为不同值的方法
最近在工作的时候突然想到了一个问题,就是mysql如何才能实现批量更新多条记录的同一个字段为不同值,于是就动手实践起来了,发现其中的学问还是挺多的,所以想着
就总结下来分享给大家,有需要的朋友们可以参考借鉴,下面来一起看看吧。
首先首先mysql更新数据的某个字段,一般这样写:更新数据的某个字段,一般这样写:
UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';
也可以这样用in指定要更新的记录:
UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values');
这里注意这里注意 ‘other_values' 是一个逗号(,)分隔的字符串,如:1,2,3
如果更新多条数据而且每条记录要更新的值不同,可能很多人会这样写:如果更新多条数据而且每条记录要更新的值不同,可能很多人会这样写:
foreach ($values as $id => $myvalue) {
$sql = "UPDATE mytable SET myfield = $myvalue WHERE id = $id";
mysql_query($sql);
}
即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很容易造成阻塞。
那么能不能一条sql语句实现批量更新呢?
mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。
UPDATE mytable
SET myfield = CASE id
WHEN 1 THEN 'myvalue1'
WHEN 2 THEN 'myvalue2'
WHEN 3 THEN 'myvalue3'
END
WHERE other_field ('other_values')
如果如果where条件查询出记录的条件查询出记录的id不在不在CASE范围内,范围内,myfield将被设置为空。将被设置为空。
如果更新多个值的话,只需要稍加修改:
UPDATE mytable
SET myfield1 = CASE id
WHEN 1 THEN 'myvalue11'
WHEN 2 THEN 'myvalue12'
WHEN 3 THEN 'myvalue13'
END,
myfield2 = CASE id
WHEN 1 THEN 'myvalue21'
WHEN 2 THEN 'myvalue22'
WHEN 3 THEN 'myvalue23'
END
WHERE id IN (1,2,3)
这里以php为例,构造这两条mysql语句:
1、更新多条单个字段为不同值、更新多条单个字段为不同值, mysql模式模式
$ids_values = array(
1 => 11,
2 => 22,
3 => 33,
4 => 44,
5 => 55,
6 => 66,
7 => 77,
8 => 88,
);
$ids = implode(',', array_keys($ids_values ));
$sql = "UPDATE mytable SET myfield = CASE id ";
foreach ($ids_values as $id=> $myvalue) {
$sql .= sprintf("WHEN %d THEN %d ", $id, $myvalue);
}
$sql .= "END WHERE id IN ($ids)";
echo $sql.";<br/>";
输出:
UPDATE mytable SET myfield = CASE id WHEN 1 THEN 11 WHEN 2 THEN 22 WHEN 3 THEN 33 WHEN 4 THEN 44 WHEN 5 THEN 55 WHEN 6 THEN 66 WHEN 7 THEN 77 WHEN 8 THEN 88 END WHERE id IN (1,2,3,4,5,6,7,8);
2、更新多个字段为不同值、更新多个字段为不同值, PDO模式模式
$data = array(array('id' => 1, 'myfield1val' => 11, 'myfield2val' => 111), array('id' => 2, 'myfield1val' => 22, 'myfield2val' => 222));
$where_in_ids = implode(',', array_map(function($v) {return ":id_" . $v['id'];}, $data));
$update_sql = 'UPDATE mytable SET';
$params = array();
$update_sql .= ' myfield1 = CASE id';
foreach($data as $key => $item) {
$update_sql .= " WHEN :id_" . $key . " THEN :myfield1val_" . $key . " ";
$params[":id_" . $key] = $item['id'];
$params[":myfield1val_" . $key] = $item['myfield1val'];
}
$update_sql .= " END";
$update_sql .= ',myfield2 = CASE id';
foreach($data as $key => $item) {
$update_sql .= " WHEN :id_" . $key . " THEN :myfield2val_" . $key . " ";
$params[":id_" . $key] = $item['id'];
$params[":myfield1va2_" . $key] = $item['myfield2val'];
}
$update_sql .= " END";
$update_sql .= " WHERE id IN (" . $where_in_ids . ")";
echo $update_sql.";<br/>";
var_dump($params);
输出:
UPDATE mytable SET myfield1 = CASE id WHEN :id_0 THEN :myfield1val_0 WHEN :id_1 THEN :myfield1val_1 END,myfield2 = CASE id WHEN :id_0 THEN :myfield2val_0 WHEN :id_1 THEN :myfield2val_1 END WHERE id IN (:id_1,:id_2);
array (size=6)
':id_0' => int 1
':myfield1val_0' => int 11
':id_1' => int 2
':myfield1val_1' => int 22
':myfield1va2_0' => int 111
':myfield1va2_1' => int 222
另外三种批量更新方式另外三种批量更新方式
weixin_38650516
- 粉丝: 11
- 资源: 971
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0