為了減少數據庫連接的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不能直接循環,循環出來的是帶大括號的列名稱