2011-02-11 101 views

回答

1

正如MySQL文档团队的成员表示here

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

角落找寻工作是将数据导入到专用表,然后执行INSERT INTO ... SELECT ...这将是原子操作。在庞大的数据集上,这是潜在的问题,因为长期交易。

+0

请注意,这适用于不支持事务的MyISAM表。 InnoDB至少将LOAD DATA ...视为一项交易。 – nos 2011-09-20 21:28:51

1

MySQL manual表示MySqlBulkLoader是'LOAD DATA INFILE'的包装。如果你指定IGNORE,那 重复上一个独特的 键值的现有行被跳过输入行

:注视“LOAD DATA INFILE”的文件,我注意到这一段。如果不指定 指定任一选项,则行为 取决于是否指定LOCAL关键字 。如果没有LOCAL,则在找到重复键值 并忽略文本文件 的其余部分时会发生错误 。使用LOCAL时,默认 的行为与指定IGNORE为 的行为相同;这是因为服务器 无法在操作过程中停止传输 文件。

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

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

所以在写回信

相关问题