PHP大批量更新数据,大批量插入数据,mysql批量更新与插入多种方法

摘要:
当PHP文件执行时间过长时,//取消脚本执行延迟上限ignore_user_art(TRUE);它不会导致脚本中止。此外,当我们获取和处理数据时,charset=utf-8“);$params=array('value'=>insert($params);query('BEGIN');query('COMMIT');strlen($sql)-1);
在工作中遇到了需要大批量的更新同步数据,首先用了个笨方法测试,那就是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,如果更新的字段不全会将缺失的字段设置为缺省值,这个在实际工作中要注意,很危险

 

免责声明:文章转载自《PHP大批量更新数据,大批量插入数据,mysql批量更新与插入多种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇撩课-Web大前端每天5道面试题-Day4七种网卡绑定模式详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

项目开发规范(编码规范、命名规范、安全规范、前端优化、源码提交规范、代码维护规范、产品发布规范)...

第一节:编码过程的命名约定(编码命名规范) ====================================================================================== ====================================PHP编码规范==========================...

Android混淆

一、为什么要混淆 为了避免apk在发布后被用户通过反编译拿到源代码和资源文件,然后修改资源和代码之后就变成一个新的apk。而经过混淆后的APK,即使被反编译,也难以阅读,注意混淆不是让apk不能阅读,而是加大阅读的难度,为了避免劳动成果被窃取,也避免出现安全漏洞和隐患,所以在apk发布之前一定要进行混淆。 二、混淆的原理 Java是一种跨平台、解释型语言...

在CentOS 7上安装&amp;amp;配置PostgreSQL 12

一、前言 1、本文主要内容 PostgreSQL 12 安装(yum) PostgreSQL 12 基础配置 PostgreSQL 12 远程访问配置 PostgreSQL 基础管理 2、本文环境信息与适用范围 环境信息 软件 版本 CentOS 7.6 Release PostgreSQL 12.x 适用范围 软件 版本...

Android对话框

1.ProgressDialog(进度条对话框)的基本使用 我们创建进度条对话框的方式有两种: 1.直接调用ProgressDialog提供的静态方法show()显示 2.创建ProgressDialog,再设置对话框的参数,最后show()出来 代码示例: 关键实现代码: MainActivity.java: public class...

mysql 5.7 压缩包安装教程

前言 :  避免之前装的MySQL影响   首先进入dos窗口执行   sc delete mysql        删除已有的mysql服务 (一) 下载MySQL5.7 版本压缩包   网址   https://dev.mysql.com/downloads/mysql/    (二)解压到自己想要放的目录   我放在了F盘   F:phoneMall...

软工作业05

软件工程 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1 作业要求 https://edu.cnblogs.com/campus/zswxy/software-engineering-2017-1/homework/10619 作业目标 网页实现家族树 作...