mysql批量更新多表数据
mysql批量更新多表数据
update库2.tb,库1.tbset库2.tb.body=库1.tb.bodywhere库2.tb.id=库1.tb.id
千万数据量的表, 执行根据ID去update一条数据不会很慢吧
mysql批量更新如果一条条去更新效率是相当的慢,循环一条一条的更新记录,一条记录update一次,这样性能很差,也很容易造成阻塞。
mysql批量更新共有以下四种办法
1、.replaceinto批量更新
replaceintotest_tbl(id,dr)values(1,'2'),(2,'3'),...(x,'y');
2、insertinto...onduplicatekeyupdate批量更新
insertintotest_tbl(id,dr)values(1,'2'),(2,'3'),...(x,'y')onduplicatekeyupdatedr=values(dr);
3.创建临时表,先更新临时表,然后从临时表中update
createtemporarytabletmp(idint(4)primarykey,drvarchar(50));
insertintotmpvalues(0,'gone'),(1,'xx'),...(m,'yy');
updatetest_tbl,tmpsettest_tbl.dr=tmp.drwheretest_tbl.id=tmp.id;
注意:这种方法需要用户有temporary表的create权限。
4、使用mysql自带的语句构建批量更新
mysql实现批量可以用点小技巧来实现:
UPDATEyoiurtable
SETdingdan=CASEid
WHEN1THEN3
WHEN2THEN4
WHEN3THEN5
WHEREidIN(1,2,3)
这句sql的意思是,更新dingdan字段,如果id=1则dingdan的值为3,如果id=2则dingdan的值为4……
where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。
如果更新多个值的话,只需要稍加修改:
UPDATEcategories
SETdingdan=CASEid
WHEN1THEN3
WHEN2THEN4
WHEN3THEN5
title=CASEid
WHEN1THEN'NewTitle1'
WHEN2THEN'NewTitle2'
WHEN3THEN'NewTitle3'
WHEREidIN(1,2,3)
到这里,已经完成一条mysql语句更新多条记录了。
php中用数组形式赋值批量更新的代码:
$display_order=array(
1=>4,
2=>1,
3=>2,
4=>3,
5=>9,
6=>5,
7=>8,
$ids=implode(',',array_keys($display_order));
$sql="UPDATEcategoriesSETdisplay_order=CASEid";
foreach($display_orderas$id=>$ordinal){
$sql.=sprintf("WHEN%dTHEN%d",$id,$ordinal);
$sql.="ENDWHEREidIN($ids)";
echo$sql;
这个例子,有8条记录进行更新。代码也很容易理解,你学会了吗
更新100000条数据的性能就测试结果来看,测试当时使用replaceinto性能较好。
replaceinto和insertintoonduplicatekeyupdate的不同在于:
replaceinto操作本质是对重复的记录先delete后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否则不小心清空大量数据可不是闹着玩的。
insertinto则是只update重复记录,不会改变其它字段。
mysql 批量更新10000+的数据,有什么效率比较高的方法
首先, 插入上万条数据,对于数据库来说并不是“很大”的工作量,一般配置的笔记本电脑都可以在1分钟内完成。 所以最简单、最灵活的办法还是写SQL语句。
如果不希望DB编译器每次执行都编译SQL的话,可以使用存储过程,直接调用,性能上会好很多。也比较简单。
(几万条数据怎么地也得要时间去处理,所以不可能特别快的。)
如果由于各种原因,导致这个插入还是很慢, 而且你的MYSQL又是5.0以上版本的话,可以使用BulkCopy来进行批量操作。
BulkCopy的原理就是Client直接把一个数组(DataTable)传给DB,然后传入表名,所有的编译、操作都由DB自己完成,效率很高。
引用MySql.Data.dll , 调用MysqlBulkCopy函数即可。
这个函数在处理海量数据插入的时候效率尤为明显, 小量数据反而没什么优势,而且由于传入的DataTable格式必须和表的字段一模一样(空的列也要传进去),导致C#要写很多代码来构造这个数组,所以要你自己权衡用还是不用。
我在自己的电脑上批量插入一亿条数据,Insert写法大概需要1小时,BulkCopy大概只需要5分钟。同问。。。
mysql数据批量更新,谢谢
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'];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']; 这样应该可以解决你问题,怎么把两条语句合并,我就不清楚了,你查查