我有这个临时表,用于保存table1中要修改的数据,以更新table1我使用查询:
UPDATE table1 pr
INNER JOIN tmpTable tmp
ON (pr.product_id = tmp.product_id)
SET pr.isactive = tmp.isactive
但是由于tmpTable需要更新大量数据,因此我的查询有时会结束“超时”。所以我的问题是,什么基本上是批量更新数据的最简单方法?比如,10K。
提前致谢!
答案 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子句限制数据 - 如何使用您当前提供的信息格式化无法回答的位置。