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

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

    前言

    假如说我有这样一个表,我想往这个表里面插入大量数据

    CREATE TABLE IF NOT EXISTS `user_info` (
     `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
     `name` varchar(255) NOT NULL default '' COMMENT '姓名',
     `age` int(11) NOT NULL default '0' COMMENT '年龄',
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';

    批量插入

    方法一、使用for循环插入

    在往mysql插入少量数据的时候,我们一般用for循环

    $arr = [	
    	[
    		'name' => 'testname1',
    		'age' => 18,
    	],
    	[
    		'name' => 'testname2',
    		'age' => 19,
    	],
    	[
    		'name' => 'testname3',
    		'age' => 18,
    	],
    ];
    
    $servername = "localhost";
    $port = 3306;
    $username = "username";
    $password = "password";
    $dbname = "mytestdb";
    
    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname, $port);
    
    // 检测连接
    if ($conn->connect_error) {
     die("connect failed: " . $conn->connect_error);
    } 
    
    $costBegin = microtime(true);
    
    foreach($arr as $item) {
     	$sql = sprintf("INSERT INTO user_info (name, age) VALUES ( '%s', %d);", $item['name'], (int)$item['age']);	 
    	if ($conn->query($sql) === TRUE) {
    	 echo "insert success";
    	} else {
    	 echo "Error: " . $sql . "br>" . $conn->error;
    	}
    }
    
    $costEnd = microtime(true);
    $cost = round($costEnd - $costBegin, 3);
    var_dump($cost);
    
    $conn->close();

    假如说要批量插入大量数据,如果还用for循环的办法插入是没有问题的,只是时间会比较长。

    对比一下插入少量数据与插入大量数据,使用上面的for循环插入耗费的时间:

    条数 时间 (单位:秒)
    10 0.011
    1000 0.585
    10000 5.733
    100000 60.587

    方法二、使用insert语句合并插入

    mysql里面是可以使用insert语句进行合并插入的,比如

    INSERT INTO user_info (name, age) VALUES ('name1', 18), ('name2', 19);表示一次插入两条数据

    下面看示例代码,看看不同数据条数下

    $arr = [	
    	[
    		'name' => 'testname1',
    		'age' => 18,
    	],
    	[
    		'name' => 'testname2',
    		'age' => 19,
    	],
    	[
    		'name' => 'testname3',
    		'age' => 18,
    	],
    	// 此处省略
    	……
    	……
    ];
    
    $servername = "localhost";
    $port = 3306;
    $username = "username";
    $password = "password";
    $dbname = "mytestdb";
    
    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname, $port);
    
    // 检测连接
    if ($conn->connect_error) {
     die("connect failed: " . $conn->connect_error);
    } 
    
    $costBegin = microtime(true);
    
    if (!empty($arr)) {
    	$sql = sprintf("INSERT INTO user_info (name, age) VALUES ");
    
    	foreach($arr as $item) {
      $itemStr = '( ';
      $itemStr .= sprintf("'%s', %d", $item['name'], (int)$item['age']);
      $itemStr .= '),';
      $sql .= $itemStr;
      }
    
     // 去除最后一个逗号,并且加上结束分号
     $sql = rtrim($sql, ',');
     $sql .= ';';
    
    	if ($conn->query($sql) === TRUE) {
    	} else {
    	 echo "Error: " . $sql . "br>" . $conn->error;
    	}
    }
    
    $costEnd = microtime(true);
    $cost = round($costEnd - $costBegin, 3);
    var_dump($cost);
    
    $conn->close();

    下面看一下少量数据与大量数据的时间对比。从总体时间上,可以看出insert合并插入比刚才for循环插入节约了很多时间

    条数 时间 (单位:秒)
    10 0.006
    1000 0.025
    10000 0.131
    100000 1.23

    当然,如果你觉得数组太大,想要减少sql错误的风险,也可以使用array_chunk将数组切成指定大小的块,然后对每个块进行insert合并插入

    总结

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

    您可能感兴趣的文章:
    • PHP执行批量mysql语句的解决方法
    • 使用phpMyAdmin批量修改Mysql数据表前缀的方法
    • php+mysqli实现批量执行插入、更新及删除数据的方法
    • php+mysqli批量查询多张表数据的方法
    • PHP mysqli 增强 批量执行sql 语句的实现代码
    • php从memcache读取数据再批量写入mysql的方法
    • php+mysqli实现批量替换数据库表前缀的方法
    • php中批量删除Mysql中相同前缀的数据表的代码
    • PHP实现mysqli批量执行多条语句的方法示例
    • PHP数据库编程之MySQL优化策略概述
    • php+mysql查询优化简单实例
    • PHP优化之批量操作MySQL实例分析
    上一篇:yii2 url重写并隐藏index.php方法
    下一篇:PHP获取星期几的常用方法小结
  • 相关文章
  • 

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

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

    php往mysql中批量插入数据实例教程 php,往,mysql,中,批量,插入,