mysql数据批量更新,谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据批量更新,谢谢相关的知识,希望对你有一定的参考价值。
一张表a有多条数据,根据传入的ids,1<=ids<=4。更新字段b,b字段有且仅有两个值,1或0。现需要把传入的id对应的b全部更新为1,其它数据的b字段则更新为0。还有一个注意的就是,前台用户可能只修改一条数据,及传递一个id,所以另外三条所对应的b字段数要保持不变,及还是为1.所以怎么实现呢?前台需要传递没修改的id和修改的id,还是只传递修改的id。sql语句又怎么写?
参考技术A update a set b=1 where id in ($ids) and id !=$_GET['id'];update a set b=0 where id not in ($ids) and id !=$_GET['id'];
这样应该可以解决你问题,怎么把两条语句合并,我就不清楚了,你查查追问
我用两条也能实现啊,但考虑到性能,所以想一条,而且是写在ibatis里面。
本回答被提问者和网友采纳 参考技术B mysql数据批量更新update a set b=1 where id in ($ids) and id !=$_GET['id'];
update a set b=0 where id not in ($ids) and id !=$_GET['id'];
批量更新mysql表数据
1、批量更新表中某个字段,如果表比较大,每条记录都执行一条update,1s执行10条数据,10万条数据就要1W秒,3个多小时。
2、可以用case when 来实现,模板如下
UPDATE categories SET display_order = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END WHERE id IN (1,2,3);
ID 是条件字段,WHEN 相当于where,THEN 表示要更新的字段设置成的值。
如果有多个字段要更新,模板如下
UPDATE categories SET dingdan = CASE id WHEN 1 THEN 3 WHEN 2 THEN 4 WHEN 3 THEN 5 END, title = CASE id WHEN 1 THEN ‘New Title 1‘ WHEN 2 THEN ‘New Title 2‘ WHEN 3 THEN ‘New Title 3‘ END WHERE id IN (1,2,3)
手动串接字符太麻烦,可以用python,每串接2000条,执行一次sql,1分钟内解决问题:
sql = " SELECT `id`,c_id,SUM(`total_price` - `reduction`) AS price FROM `orders` WHERE STATUS IN (9,11) AND total_price >0 GROUP BY c_id HAVING price > 0 ORDER BY c_id" datas = bt.getData(sql) error = 0 count = 0 totalcount = 0 id = [] sql = "UPDATE customer SET consumption_amount = consumption_amount + CASE id " sqlwhen = "" sqlend = "END WHERE id in " sqllen = 2000 with open("sqlupdatenew.sql",‘w‘) as f: print(len(datas)) for data in datas: if count <= sqllen: sqlwhen += "WHEN " + str(data[1]) + " THEN " + str(data[2]) + " " count += 1 id.append(data[1]) if count == sqllen or totalcount == len(datas) -1: mysql = sql + sqlwhen + sqlend + str(tuple(id)) bt.executesql(mysql) temp = sql + sqlwhen + sqlend + str(tuple(id)) + "; " f.write(temp) print(totalcount) count = 0 sqlwhen = "" id.clear() totalcount += 1 bt.closemysql()
以上是关于mysql数据批量更新,谢谢的主要内容,如果未能解决你的问题,请参考以下文章
C#如何将datatable中的数据批量更新到MYSQL数据库