• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql大批量插入数据的4种方法示例

    前言

    本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

    方法一:循环插入

    这个也是最普通的方式,如果数据量不是很大,可以使用,但是每次都要消耗连接数据库的资源。

    大致思维如下

    (我这里写伪代码,具体编写可以结合自己的业务逻辑或者框架语法编写)

    for($i=1;$i=100;$i++){
     $sql = 'insert...............';
     //querysql
    }
    foreach($arr as $key => $value){
    $sql = 'insert...............';
     //querysql
    }
    while($i = 100){
    $sql = 'insert...............';
     //querysql
     $i++
    }

    因为太过普通同时也没什么难度同时也不是我今天主要写的所以这里我不多说

    方法二:减少连接资源,拼接一条sql

    伪代码如下

    //这里假设arr的key和数据库字段同步,其实大多数框架中在php操作数据库的时候都是这么设计的
    $arr_keys  = array_keys($arr);
    $sql    = 'INSERT INTO tablename (' . implode(',' ,$arr_keys) . ') values';
    $arr_values  = array_values($arr);
    $sql    .= " ('" . implode("','" ,$arr_values) . "'),";
    $sql    = substr($sql ,0 ,-1);
    //拼接之后大概就是 INSERT INTO tablename ('username','password') values 
    ('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx')
    .......
    //querysql

    这样写正常插入一万条基本问题不大,除非数据很长,应付普通的批量插入够用了,比如:批量生成卡号,批量生成随机码等等。。。

    方法三:使用存储过程

    这个我手里正好再用这个就把sql付出来,具体业务逻辑大家自己组合一下就可以。

    delimiter $$$
    create procedure zqtest()
    begin
    declare i int default 0;
    set i=0;
    start transaction;
    while i80000 do
     //your insert sql 
    set i=i+1;
    end while;
    commit;
    end
    $$$
    delimiter;
    call zqtest();

    这个也只是个测试代码,具体参数大家自行定义

    我这里是一次插入8万条,虽然不多但是,每一条数据量都很大,有很多varchar4000 和text字段
    耗时 6.524s

    方法四:使用MYSQL LOCAL_INFILE

    这个我目前正在使用,所以顺便把pdo的代码也复上来,以便大家参考

    //设置pdo开启MYSQL_ATTR_LOCAL_INFILE
    /*hs96.cn@gmail.com
    public function pdo_local_info ()
    {
      global $system_dbserver;
      $dbname = 'hs96.cn@gmail.com';
      $ip  = 'hs96.cn@gmail.com';
      $user = 'hs96.cn@gmail.com';
      $pwd  = 'hs96.cn@gmail.com';
      $dsn  = 'mysql:dbname=' . $dbname . ';host=' . $ip . ';port=3306';
      $options = [PDO::MYSQL_ATTR_LOCAL_INFILE => true];
      $db  = new PDO($dsn ,$user ,$pwd ,$options);
      return $db;
     }
    //伪代码如下
    public function test(){
      $arr_keys   = array_keys($arr);
      $root_dir   = $_SERVER["DOCUMENT_ROOT"] . '/';
      $my_file   = $root_dir . "hs96.cn@gmail.com/sql_cache/" . $order['OrderNo'] . '.sql';
      $fhandler   = fopen($my_file,'a+');
      if ($fhandler) {
      $sql = implode("\t" ,$arr);
       $i = 1;
       while ($i = 80000)
       {
        $i++;
        fwrite($fhandler ,$sql . "\r\n");
       }
       $sql = "LOAD DATA local INFILE '" . $myFile . "' INTO TABLE ";
       $sql .= "tablename (" . implode(',' ,$arr_keys) . ")";
       $pdo = $this->pdo_local_info ();
       $res = $pdo->exec($sql);
       if (!$res) {
        //TODO 插入失败
       }
       @unlink($my_file);
      }
    }

    这个同样每一条数据量都很大,有很多varchar4000 和text字段

    耗时 2.160s

    以上满足基本需求,100万数据问题不大,要不数据实在太大也涉及分库分表了,或者使用队列插入了。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • MYSQL批量插入数据的实现代码
    • MySQL实现批量插入以优化性能的教程
    • MySQL批量插入遇上唯一索引避免方法
    • MySQL批量插入数据脚本
    • MySQL批量SQL插入性能优化详解
    • MySQL批量插入和唯一索引问题的解决方法
    • MySQL如何快速批量插入1000w条数据
    • MySQL中几种插入和批量语句实例详解
    上一篇:MySQL死锁套路之唯一索引下批量插入顺序不一致
    下一篇:解决Node.js mysql客户端不支持认证协议引发的问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql大批量插入数据的4种方法示例 mysql,大批量,插入,数据,