6

MySqlBulkLoader 可以与事务一起使用吗?我看不到将事务显式附加到加载程序实例的方法。还有其他方法吗?

4

2 回答 2

1

正如MySQL 文档团队成员在此处所述:

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

解决方法是将数据导入专用表,然后执行INSERT INTO ... SELECT ...原子操作。在庞大的数据集上,由于长事务,这是潜在的问题。

于 2011-05-05T19:16:18.303 回答
1

MySQL 手册指出 MySqlBulkLoader 是“LOAD DATA INFILE”的包装器。在查看 'LOAD DATA INFILE' 文档时,我注意到了这一段:

如果您指定 IGNORE,将跳过与唯一键值上的现有行重复的输入行。如果您不指定任一选项,则行为取决于是否指定了 LOCAL 关键字。如果没有 LOCAL,则在找到重复键值时会发生错误,并忽略文本文件的其余部分。对于 LOCAL,默认行为与指定 IGNORE 相同;这是因为服务器无法在操作过程中停止文件的传输。

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

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

所以在回答

于 2011-02-15T15:31:32.577 回答