Welcome 微信登录

首页 / 数据库 / MySQL / MySQL的多行插入

MySQL的多行插入由于mysql的autocommit默认为打开的,而且很多生产环境都是设置为在事务提交时需要写磁盘,所以提交产生的io开销非常大。在繁忙的oltp系统中,可能这是主要的性能瓶劲.因此减少提交的次数非常重要,尽可能采用批量提交的方式而不是使用单次提交的。Fedora 20下安装搭建LAMP环境Apache+MySQL+PHP  http://www.linuxidc.com/Linux/2014-05/101266.htm《MySQL权威指南(原书第2版)》清晰中文扫描版 PDF http://www.linuxidc.com/Linux/2014-03/98821.htm源码包编译安装MySQL 5.6脚本 http://www.linuxidc.com/Linux/2014-04/99991.htmmysql的insert语句本可以支持一次多行insert.这种方式在其他的数据库中没有比如Oracle.测试开始前mysql> show status like "%commit%" ;
 +----------------+-------+
 | Variable_name  | Value |
 +----------------+-------+
 | Com_commit   | 0   |
| Com_xa_commit  | 0   |
| Handler_commit | 0   |
+----------------+-------+
 3 rows in set (0.00 sec)使用多行insert。
 mysql>  insert into t1(a)       
    ->            values (1),   
    ->                 (2);
 Query OK, 2 rows affected (0.00 sec)
 Records: 2  Duplicates: 0  Warnings: 0数据库只有提交一次.
 mysql> show status like "%commit%" ;
 +----------------+-------+
 | Variable_name  | Value |
 +----------------+-------+
 | Com_commit   | 0   |
| Com_xa_commit  | 0   |
| Handler_commit | 1   |
+----------------+-------+
 3 rows in set (0.00 sec)可以看到通过这种方式可以对批量insert进行优化.SQL>  insert into t1(a)
 2           values (1),
 3                    (2);
 
 insert into t1(a)
            values (1),
                 (2)
 
ORA-00933: SQL command not properly ended对于这种直接insert多行的方式,oracle数据库不支持。本文永久更新链接地址