簡體   English   中英

使用MySQL批量更新多個表

[英]Update multiple table in Bulk using 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

等等

這是我當前的腳本,它一步一步地更新每個地址。

要在單個查詢中更新多個條目,我可以使用like,

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

有沒有辦法組合這些查詢,以更新單個查詢中的多個表以及多個行?

謝謝

我不確定我是否遵循您所說的“批量”。 我假設您的意思是更新每個表中的多個條目。 在這種情況下,您需要一個條件,該條件返回多個要更新的條目。 假設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結合將產生期望的結果。

您可以使用交易來實現

BEGIN TRANSACTION;

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

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

COMMIT;

注意:您要批量執行的所有查詢都應在BEGINCOMMIT內

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM