MySqlBulkLoader可以与事务一起使用吗?我没有看到将事务显式附加到加载器实例的方法。还有另一种方式吗?
答案 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 ...
,这将是原子操作。在庞大的数据集上,由于长期交易,这是潜在的问题。