MySqlBulkLoader可以用于事务吗?

时间:2011-02-11 23:02:44

标签: mysql transactions bulkinsert bulkloader

MySqlBulkLoader可以与事务一起使用吗?我没有看到将事务显式附加到加载器实例的方法。还有另一种方式吗?

2 个答案:

答案 0 :(得分:1)

MySQL manual表示MySqlBulkLoader是'LOAD DATA INFILE'的包装。在查看“LOAD DATA INFILE”文档时,我注意到了这一段:

  

如果指定IGNORE,则输入行   复制唯一的现有行   键值被跳过。如果你不   指定任一选项,行为   取决于LOCAL关键字   已指定。没有LOCAL,就是错误   当重复键值为时发生   找到了,文本文件的其余部分   被忽略了。使用LOCAL,默认值   行为和IGNORE一样   规定;这是因为服务器   无法阻止传播   文件在操作过程中。

我发现没有关于交易的讨论,但上面的段落表明交易是不可能的。

解决方法是将数据导入导入表,然后使用单独的存储过程使用事务处理数据到所需的表中。

所以回答

答案 1 :(得分:1)

如MySQL文档小组成员所述here

It's not atomic.  The records loaded prior to the error will be in the
table.

Work arround是将数据导入专用表,然后执行INSERT INTO ... SELECT ...,这将是原子操作。在庞大的数据集上,由于长期交易,这是潜在的问题。