我有一个有67,000行的文本文件,每一行都是一个update语句。
是否可以一次执行所有update语句?或者我可以用什么工具在MySQL中完成这个任务呢?
大多数数据或正在更新的列都会更改。
下面是几个用于更新的示例。
UPDATE emailTbl SET CC="", BCC="", recipient_new="someone@domain.com" WHERE docid=0000000139;
UPDATE emailTbl SET CC="", BCC="", recipient_new="someone2@domain.com" WHERE docid=0000000362;
UPDATE emailTbl SET sender_new="aperson@domain.com", CC="", BCC="", recipient_new="anotheruser@domain.com" WHERE docid=0000004313; 发布于 2014-01-21 21:17:18
您不需要说明是使用InnoDB还是使用MyISAM表。这很重要,因为InnoDB支持事务。通过在文本文件中添加一个偶然的事务行,您可以使它在InnoDB上运行得更快。
理想情况下,该文件应该如下所示:
START TRANSACTION;
UPDATE emailTbl SET CC="", BCC="", recipient_new="someone@domain.com" WHERE docid=0000000139;
UPDATE emailTbl SET blah blah blah;
UPDATE emailTbl SET blah blah blah;
...97 more UPDATE lines ...
COMMIT;
START TRANSACTION;
UPDATE emailTbl SET blah blah blah;
...99 more UPDATE lines ...
COMMIT;
START TRANSACTION;
UPDATE emailTbl SET blah blah blah;
...99 more UPDATE lines ...
COMMIT;换句话说,使用START TRANSACTION;开始您的文件。用COMMIT;结束它。每百行左右插入这两行,以完成一项事务并启动另一项事务。
COMMIT;
START TRANSACTION;如果不这样做,命令行mysql客户端将在自动提交模式下运行,这将使其在所有这些更新中花费更长的时间;它将对每一行执行一次提交。
如果在关闭自动提交模式下运行mysql,它将尝试在一个事务中完成所有67千兆。您可以填充服务器的提交缓冲区RAM。
发布于 2014-01-21 20:40:47
使用mysql命令行工具支持这一点。
这些语句按顺序执行。我不知道有什么工具可以并行完成这个任务,我也不确定这是个好主意。
https://stackoverflow.com/questions/21268396
复制相似问题