PHP⼤批量更新数据,⼤批量插⼊数据,mysql批量更新与插⼊多种⽅法
在⼯作中遇到了需要⼤批量的更新同步数据,⾸先⽤了个笨⽅法测试,那就是for循环插⼊与更新。由于数据是从另外⼀个⼤型⽹站的接⼝中获取的,我本地需要进⾏处理后,再进⾏更新与判断,程序执⾏完成之后,发现耗时太长,仅仅五千条数据就在进⾏更新与插⼊的操作的时候,我们⾸先必须考虑到⽂件执⾏时间的问题。当php⽂件执⾏时间过长时,服务器会终⽌该⽂件的执⾏,所以我们要么更改php.ini配置,要么在⽂件开头加上下列代码:
批量更新sql语句 set_time_limit(0); //取消脚本执⾏延时上限
ignore_user_abort(TRUE); //如果客户端断开连接,不会引起脚本abort
另外我们在获取数据以及对数据进⾏处理的时候,可能会造成数据乱码或者编码格式错误,在开头加上设置编码格式的代码,如下:
header("content-type:text/html;charset=utf-8");
下⾯我们来进⾏插⼊的实例操作:
⽅法⼀:根据资料显⽰,可以进⾏事务处理操作,经过测试,时间确实缩短了,五千条数据⼤概⼀个多⼩时全部处理完毕,时间缩短了⼀⼤半。但是这⽅法必要要求是(该数据库⽀持事务处理),重中之重
⽰例代码如下:
$connect_mysql->query(‘BEGIN');
$params=array(‘value'=>'50′);
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(‘COMMIT');
$connect_mysql->query(‘BEGIN');
}
}
$connect_mysql->query(‘COMMIT');
该⽅法需要注意的是:
1.每次rollback或者commit之后加上begin,否则下次循环将不会开启事务
2.在循环结束后,加上commit,否则可能会有开启的事务未commit或者rollback,会造成数据库错误:1025-lock wait timeout exceeded;try restarting transaction
⽅法⼆:对sql语句进⾏拼接,最后统⼀插⼊。
代码⽰例如下:
$sql= “insert into twenty_million (value) values”;
for($i=0;$i<2000000;$i++){
$sql.=”('50′),”;
};
$sql=substr($sql,0,strlen($sql)-1);
$connect_mysql->query($sql);
该⽅法的主要耗时是在程序数据的处理上,减少了与数据库的连接与操作,⽽我们知道程序的短板和主要耗时都是在数据库上,该⽅法确实有效地减少了程序执⾏的时间,我们在使⽤的时候可以使⽤该⽅法
但是必须注意的是,该⽅法语句的字段必须正确,并且与值对应,不能有错误的值,否则插⼊会失败
下⾯是对于数据批量更新的操作,下列⽅法真的让⼈受益良多,打开新知识的⼤门
⽅法⼀:该⽅法根据资料所述,实际上是将对应的数据先进⾏delete,再进⾏insert,如果更新的字段不全会将缺失的字段设置为缺省值,这个在实际⼯作中要注意,很危险
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论