为了减少数据库连接的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不能直接循环,循环出来的是带大括号的列名称