飞翔鸟

人生无止境,奋斗不息

(转)批量插入sql语句

为了减少数据库连接的I/O开销,一般会把多条数据插入放在一条SQL语句中一次执行。
1、INSERT INTO TABLE(col1, col2) VALUES(val11, val12), (val21, val22),(val31,val32) ;
2、INSERT INTO TABLE(col1, col2) SELECT val11, val12 UNION ALL SELECT val21, val22 union all select val31, val32 ;
这样的写法是属于复合SQL语句,表示先把两个SELECT的结果集进行无删减的联合,再把联合结果插入到TABLE中。

 

批量插入的确是比一条条插入效率高的多

批量插入如果数据量太大可能出现下面的情况:

MySQL报错:Packets larger than max_allowed_packet are not allowed

解决方法:

在导大容量数据特别是CLOB数据时,可能会出现异常:“Packets larger than max_allowed_packet are not allowed”。

这是由于MySQL数据库有一个系统参数max_allowed_packet,其默认值为1048576(1M)

可以通过如下语句在数据库中查询其值:

show VARIABLES like '%max_allowed_packet%';

修改此参数的方法是在mysql文件夹找到my.ini文件,在my.ini文件[mysqld]中添加一行:

max_allowed_packet=16777216

重启MySQL,这样将可以导入不大于16M的数据了,当然这数值可以根据需要作调整。

 

dt.columns不能直接循环,循环出来的是带大括号的列名称

posted @ 2018-08-02 11:53  飞翔—鸟  阅读(13529)  评论(0编辑  收藏  举报