MySqlBulkLoader 可以与事务一起使用吗?

发布于 2024-10-17 10:32:24 字数 66 浏览 3 评论 0原文

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

Can MySqlBulkLoader be used with a transaction? I don't see a way to explicitly attach a transaction to an instance of the loader. Is there another way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

剩一世无双 2024-10-24 10:32:24

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

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

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

As stated here by member of MySQL documentation team:

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

Work arround is to import data to dedicated table and then execute INSERT INTO ... SELECT ... which will be atomic operation. On huge data sets this is potential problem becasue of long transaction.

山有枢 2024-10-24 10:32:24

MySQL 手册指出 MySqlBulkLoader 是“加载数据文件”。在查看“LOAD DATA INFILE”文档时,我注意到这一段:

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

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

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

所以在回答

The MySQL manual indicates that the MySqlBulkLoader is a wrapper of 'LOAD DATA INFILE'. While looking at the 'LOAD DATA INFILE' documentation I noticed this paragraph:

If you specify IGNORE, input rows that
duplicate an existing row on a unique
key value are skipped. If you do not
specify either option, the behavior
depends on whether the LOCAL keyword
is specified. Without LOCAL, an error
occurs when a duplicate key value is
found, and the rest of the text file
is ignored. With LOCAL, the default
behavior is the same as if IGNORE is
specified; this is because the server
has no way to stop transmission of the
file in the middle of the operation.

I found no discussion on transactions but the above paragraph would indicate that transactions are not possible.

A workaround would be to import the data into a import table and then use a separate stored procedure to process the data using transactions into the desired table.

So in answ

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文