mysql - InnoDB : Bulk insert using transaction OR combine multiple queries?

标签 mysql

在 InnoDB 中执行批量 INSERT 时,我应该使用事务吗

START TRANSACTION;
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3);
INSERT INTO tbl_name (a,b,c) VALUES(4,5,6);
INSERT INTO tbl_name (a,b,c) VALUES(7,8,9);
COMMIT TRANSACTION;

或者合并多个查询?

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

如果重要的话,我正在使用 PHP 和 MySQL 数据库在同一台机器上。

最佳答案

我建议像您在底部示例中那样合并多个查询。

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

如果任一值对失败,则不会插入任何数据。此方法还发送较少的字符和往返数据库。少字的寓意可能没有那么吸引人,但还是有一点优势的。

编辑:

蒂姆有一个很好的问题。让我包括来自 MySQL doc 的信息

If you are inserting many rows from the same client at the same time, use INSERT statements with multiple VALUES lists to insert several rows at a time. This is considerably faster (many times faster in some cases) than using separate single-row INSERT statements. If you are adding data to a nonempty table, you can tune the bulk_insert_buffer_size variable to make data insertion even faster.

关于mysql - InnoDB : Bulk insert using transaction OR combine multiple queries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34447305/

相关文章:

php - Laravel 5 Seeder - 数据库中的多行

php - 带有Where子句的CodeIgniter Select语句

mysql - 将一个表中的条目添加到现有表中(两个表都已经有条目)

mysql - 为了对分组数据进行排序而摆脱子查询

php - 如何在 php 中使用多个 MySQL 行和值

java - 尝试在 hibernate/spring 中创建用户登录的东西

php - 尝试将小计乘以运费百分比以获得总计

php - PDO 查询执行无效,bindValue 不匹配问题

MYSQL - 无法正确加入 Group By 2 Columns

python - 在没有转储文件的情况下使用 Python 将 SQLite3 数据库表迁移到 MySQL