mysql批量录入数据的方法

  介绍

这篇文章主要介绍了mysql批量录入数据的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

mysql批量录入数据的方法:1、使用循环插入;2,减少连接资源,拼接一条sql; 3、使用存储过程;4、使用【mysql LOCAL_INFILE】。

<强> mysql批量录入数据的方法:

<强>方法一:循环插入

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

大致思维如下

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

,(i=1; i<美元=100;美元我+ +){   ,sql 美元;=,& # 39;插入............... & # 39;;//querysql   }   foreach ($ arr  as  key 美元;=祝辞,美元值){=$ sql  & # 39;插入............... & # 39;;//querysql   }   而($小姐:& lt;=, 100) {=$ sql  & # 39;插入............... & # 39;;//querysql   我+ +美元   }

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

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

伪代码如下

//这里假设arr的关键和数据库字段同步,其实大多数框架中在php操作数据库的时候都是这么设计的   美元arr_keys ,=,中的(arr);   sql 美元;,,,=,& # 39;INSERT  INTO  tablename (& # 39;,只内爆(& # 39;& # 39;,,arr_keys美元),只& # 39;),值# 39;;   美元arr_values ,=,元素(arr);   sql 美元;,,,,=,,,(& # 39;“,只内爆(“& # 39;& # 39;“,,arr_values美元),只“& # 39;),“;   sql 美元;,,,=,substr (sql 美元;0,1);//拼接之后大概就是,INSERT  INTO  tablename (& # 39;用户名# 39;& # 39;密码# 39;),值   (& # 39;xxx # 39; & # 39; xxx # 39;), (& # 39; xxx # 39; & # 39; xxx # 39;), (& # 39; xxx # 39; & # 39; xxx # 39;), (& # 39; xxx # 39; & # 39; xxx # 39;), (& # 39; xxx # 39; & # 39; xxx # 39;), (& # 39; xxx # 39; & # 39; xxx # 39;)   ……//querysql

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

<强>方法三:使用存储过程

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

delimiter  $ $ $   create  procedure  zqtest ()   开始   declare 小姐:int  default  0;   set  i=0;   start 事务;   while  i<80000,   ,//your  insert  sql    set 我=+ 1;   最终获得;;   提交;   结束   $ $ $   分隔符;   call  zqtest ();

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

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

耗时6.524 s

<>强方法四:使用MYSQL LOCAL_INFILE <代码>

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

//设置pdo开启MYSQL_ATTR_LOCAL_INFILE/* hs96.cn@gmail.com   public  function  pdo_local_info  ()   {   global 才能;system_dbserver美元;   时间=美元才能dbname  & # 39; hs96.cn@gmail.com& # 39;;   美元才能ip ,=, & # 39; hs96.cn@gmail.com& # 39;;   时间=美元才能user  & # 39; hs96.cn@gmail.com& # 39;;   美元才能pwd ,=, & # 39; hs96.cn@gmail.com& # 39;;   美元才能dsn ,=, & # 39; mysql: dbname=& # 39;,只dbname 美元;只& # 39;;主机=& # 39;,只ip 美元;只& # 39;;端口=3306 & # 39;;   options 美元;才能=,(PDO: MYSQL_ATTR_LOCAL_INFILE =祝辞,真实);   美元才能db ,=, new  PDO ($ dsn  user 美元;pwd 美元,美元选项);   return 才能;$ db;   ,}//伪代码如下   public  function 测试(){   美元才能arr_keys ,,=,中的(arr);   美元才能root_dir ,,=, $ _SERVER (“DOCUMENT_ROOT"),只& # 39;/& # 39;;   美元才能my_file ,,=, root_dir 美元;只“hs96.cn@gmail.com/sql_cache/",只以美元[& # 39;orderno # 39;],只& # 39;. sql # 39;;   美元才能fhandler ,,=, fopen (my_file美元,& # 39;+ & # 39;);   if 才能;(fhandler美元),{=美元才能sql 内爆(“\ t",, $ arr);   小姐:美元,,=,1;   美元,才能while (小姐:& lt;=, 80000)   ,,{   美元,,,我+ +;   ,,,写入文件(fhandler 美元,美元sql 只“\ r \ n");   ,,}   ,,sql 美元;=,“LOAD  DATA  local  INFILE  & # 39;“,只myFile 美元;只“& # 39;,INTO  TABLE “;   ,,sql 美元。=,“tablename (“,只内爆(& # 39;& # 39;,,arr_keys美元),只“)“;   ,,pdo 美元;=,$ this→pdo_local_info  ();   ,,res 美元;=,pdo→美元exec ($ sql);   ,,if  (! $ res), {   ,,,//TODO 插入失败   ,,}   ,,@unlink ($ my_file);   ,,}   }

mysql批量录入数据的方法