首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql中可以一次运行多个用分号分隔的update语句吗?

问在mysql中可以一次运行多个用分号分隔的update语句吗?
EN

Stack Overflow用户
提问于 2014-01-21 20:26:14
回答 2查看 6.1K关注 0票数 0

我有一个有67,000行的文本文件,每一行都是一个update语句。

是否可以一次执行所有update语句?或者我可以用什么工具在MySQL中完成这个任务呢?

大多数数据或正在更新的列都会更改。

下面是几个用于更新的示例。

代码语言:javascript
复制
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;        
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-21 21:17:18

您不需要说明是使用InnoDB还是使用MyISAM表。这很重要,因为InnoDB支持事务。通过在文本文件中添加一个偶然的事务行,您可以使它在InnoDB上运行得更快。

理想情况下,该文件应该如下所示:

代码语言:javascript
复制
  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;结束它。每百行左右插入这两行,以完成一项事务并启动另一项事务。

代码语言:javascript
复制
  COMMIT;
  START TRANSACTION;

如果不这样做,命令行mysql客户端将在自动提交模式下运行,这将使其在所有这些更新中花费更长的时间;它将对每一行执行一次提交。

如果在关闭自动提交模式下运行mysql,它将尝试在一个事务中完成所有67千兆。您可以填充服务器的提交缓冲区RAM。

票数 0
EN

Stack Overflow用户

发布于 2014-01-21 20:40:47

使用mysql命令行工具支持这一点。

这些语句按顺序执行。我不知道有什么工具可以并行完成这个任务,我也不确定这是个好主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21268396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档