我想逐批更新数据

时间:2012-01-10 04:22:40

标签: php mysql

我有这个临时表,用于保存table1中要修改的数据,以更新table1我使用查询:

UPDATE table1 pr
INNER JOIN tmpTable tmp
ON (pr.product_id = tmp.product_id)
SET pr.isactive = tmp.isactive

但是由于tmpTable需要更新大量数据,因此我的查询有时会结束“超时”。所以我的问题是,什么基本上是批量更新数据的最简单方法?比如,10K。

提前致谢!

3 个答案:

答案 0 :(得分:1)

您可以使用临时表中的主键或标识键以及UPDATE语句中的WHERE子句来限制记录数。例如:

UPDATE table1 pr
INNER JOIN tmpTable tmp
ON (pr.product_id = tmp.product_id)
SET pr.isactive = tmp.isactive ***WHERE tmp.ID BETWEEN 1 and 10000***

希望这有帮助。

答案 1 :(得分:1)

你在PHP中标记了这一点,所以我假设你愿意在那里做一些工作而不只是在一个查询中。多次运行查询。像

这样的东西
for($i<$minId; $i<maxId;$i+=10000){

  $db->query("UPDATE table1 pr
  INNER JOIN tmpTable tmp
  ON (pr.product_id = tmp.product_id)
  SET pr.isactive = tmp.isactive where isactive between $i and $i+10000");

}

如果您正在运行MyISAM,那么您可能会以这种方式或部分完成状态。如果您正在运行innodb并且想要维护事务的全部或全部aspec,则必须将该循环包装在begin / commit中。但是,那么你就可能会遇到可能过度大量交易的后果。

如果您可以提供有关具体细节的更多详细信息,我可以更深入地了解这条路线。

答案 2 :(得分:0)

使用WHERE子句限制数据 - 如何使用您当前提供的信息格式化无法回答的位置。