mysql大批量插入数据的4种方法示例
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,前言本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧方法一:循环插入这个也是最普通的方式,如果数据量不是很大,可以使用,但是每
千家信息网最后更新 2025年01月24日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()begindeclare i int default 0;set i=0;start transaction;while i<80000 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.compublic 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万数据问题不大,要不数据实在太大也涉及分库分表了,或者使用队列插入了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
数据
方法
代码
很大
普通
字段
数据库
参考
学习
万条
不大
业务
内容
同时
就是
框架
资源
逻辑
问题
生成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
焦点科技互联网代款
软件开发用设备名称价格
广州点锐网络技术有限公司
中银金科软件开发面试
联想软件开发招聘
淘宝用的数据库
春考网络技术分数线
查看数据库表索引的命令
软件开发销售退税没有进项怎么办
网络安全管理技能题库
互联网网络技术专业就业
昆特牌的垃圾服务器
中兴通讯软件开发岗
一橙网络技术有限公司地址
江阴质量软件开发技术参数
vm虚拟机怎么搭建服务器
长春租房子软件开发
网页数据库链接登录
计算机微软软件开发
装了安全狗服务器很卡
外文文献常用数据库
戴尔r330服务器报价
金融软件开发的公司有哪些
软件开发领域知识
珠海名望软件开发有限公司
青少年网络安全演讲词
怎么查服务器管理员
大鱼百家网络技术有限公司
安卓开发 服务器
装了安全狗服务器很卡