使用MySQL以Bulk更新多个表

时间:2016-08-24 11:38:35

标签: php mysql

有没有办法批量更新多个表。我找到了使用单个查询进行批量更新的解决方案以及使用单个查询更新多个表。但随后寻找综合解决方案。

例如:目前正在这样做。

UPDATE a, b, c 
SET a.address = "$address", b.address = "$address", c.address = "$address" 
WHERE a.id = b.a_id AND a.id = c.a_id AND a.id = 123

UPDATE a, b, c 
SET a.address = "$address", b.address = "$address", c.address = "$address" 
WHERE a.id = b.a_id AND a.id = c.a_id AND a.id = 234

这是我当前的脚本,逐个更新每个地址。​​

要在单个查询中更新多个条目,我可以使用,

UPDATE a SET address = CASE
    WHEN id = 123 THEN 'address1'
    WHEN id = 234 THEN 'address2'
    END

有没有办法组合这些查询,在单个查询中更新多个表以及多行?

由于

2 个答案:

答案 0 :(得分:1)

我不确定我是否遵循“批量”的意思。我假设你的意思是更新每个表中的多个条目。在这种情况下,您需要一个条件,返回多个要更新的条目。假设id是你的PK,它只会返回一个条目。

您的WHERE子句与您在JOIN上使用的子句非常相似。也许你应该尝试加入你的表然后更新它们。看看这个:

https://stackoverflow.com/a/1293347/4024150

UPDATE a JOIN b ON a.id = b.id
SET a.address = '$address', b.address = '$address
WHERE (some clause that will return all the entries you want)

我已将它简化为两个表格用于演示,但基本上你的JOIN将为你提供一个在id字段上加入的大表。然后,您可以使用WHERE子句标识要在整个联接表中更新的字段。

您在上面说过,您找到了批量更新单个表的解决方案。该解决方案与JOIN相结合可以产生预期的结果。

答案 1 :(得分:0)

您可以使用交易

来实现此目的
BEGIN TRANSACTION;

UPDATE Table1
SET Table1.field1 = 'new value1' 
WHERE condition1

UPDATE Table2
SET Table2.field3 = 'new value2'
WHERE condition2

COMMIT;

注意:您要批量执行的所有查询都应位于 BEGIN COMMIT