【问题标题】:Can MySqlBulkLoader be used with a transaction?MySqlBulkLoader 可以与事务一起使用吗?
【发布时间】:2011-06-25 21:16:11
【问题描述】:

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

【问题讨论】:

    标签: mysql transactions bulkinsert bulkloader


    【解决方案1】:

    正如 MySQL 文档团队成员 here 所说:

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

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

    【讨论】:

    • 请注意,这适用于不支持事务的 MyISAM 表。 InnoDB 至少将 LOAD DATA ... 视为事务。
    【解决方案2】:

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

    如果您指定 IGNORE,则输入符合以下条件的行 在唯一的上复制现有行 键值被跳过。如果你不 指定任一选项,行为 取决于是否 LOCAL 关键字 被指定。如果没有 LOCAL,则会出错 当重复键值是 找到,以及文本文件的其余部分 被忽略。使用 LOCAL,默认 行为与 IGNORE 相同 指定的;这是因为服务器 没有办法停止传播 操作中间的文件。

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

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

    所以回答

    【讨论】:

      猜你喜欢
      • 2014-05-13
      • 2014-12-25
      • 2023-03-24
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多