• ADADADADAD

    mysql批量insert数据的方法[ mysql数据库 ]

    mysql数据库 时间:2024-11-29 09:51:29

    作者:文/会员上传

    简介:

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

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

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

    mysql批量insert数据的方法:

    方法一:循环插入

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

    大致思维如下

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

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

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

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

    伪代码如下

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

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

    方法三:使用存储过程

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

    delimiter$$$createprocedurezqtest()begindeclareiintdefault0;seti=0;starttransaction;whilei<80000do//yourinsertsqlseti=i+1;endwhile;commit;end$$$delimiter;callzqtest();

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

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

    耗时 6.524s

    方法四:使用MYSQL LOCAL_INFILE

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

    //设置pdo开启MYSQL_ATTR_LOCAL_INFILE/*hs96.cn@gmail.compublicfunctionpdo_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=newPDO($dsn,$user,$pwd,$options);return$db;}//伪代码如下publicfunctiontest(){$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="LOADDATAlocalINFILE'".$myFile."'INTOTABLE";$sql.="tablename(".implode(',',$arr_keys).")";$pdo=$this->pdo_local_info();$res=$pdo->exec($sql);if(!$res){//TODO插入失败}@unlink($my_file);}}
    mysql批量insert数据的方法.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysqlinsert