博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP大批量更新数据,大批量插入数据,mysql批量更新与插入多种方法
阅读量:5216 次
发布时间:2019-06-14

本文共 1536 字,大约阅读时间需要 5 分钟。

在工作中遇到了需要大批量的更新同步数据,首先用了个笨方法测试,那就是for循环插入与更新。由于数据是从另外一个大型网站的接口中获取的,我本地需要进行处理后,再进行更新与判断,程序执行完成之后,发现耗时太长,仅仅五千条数据就耗时了五个小时左右,非常耗时间。
在进行更新与插入的操作的时候,我们首先必须考虑到文件执行时间的问题。当php文件执行时间过长时,服务器会终止该文件的执行,所以我们要么更改php.ini配置,要么在文件开头加上下列代码:
  
  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,如果更新的字段不全会将缺失的字段设置为缺省值,这个在实际工作中要注意,很危险

 

转载于:https://www.cnblogs.com/lgqtecng/p/6415922.html

你可能感兴趣的文章
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
java,多线程实现
查看>>
个人作业4-alpha阶段个人总结
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
递归-下楼梯
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
Azure Iaas基础之---创建虚拟机
查看>>
不错的MVC文章
查看>>
网络管理相关函数
查看>>
IOS Google语音识别更新啦!!!
查看>>
20190422 T-SQL 触发器
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
poj1422_有向图最小路径覆盖数
查看>>
BootScrap
查看>>
[大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
查看>>
WEB_点击一百万次
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
Mysql出现(10061)错误提示的暴力解决办法
查看>>