跨多個MySQL 表同時更新
當出於非規範化目的而需要更新相同值的多個表時,執行效率可能會很低每個表的單獨更新。幸運的是,MySQL 提供了一種方法,使用多表更新將這些更新合併為單一操作。
考慮以下場景:
<code class="sql">-- Table One Update UPDATE Table_One SET win = win+1, streak = streak+1, score = score+200 WHERE userid = 1 AND lid = 1 LIMIT 1 -- Table Two Update UPDATE Table_Two SET win = win+1, streak = streak+1, score = score+200 WHERE userid = 1 LIMIT 1</code>
在此範例中,兩個表需要相同的資料除了表二中缺少「lid」欄位之外,值都會更新。為了合併這些更新,我們可以使用多表更新,如下所示:
<code class="sql">UPDATE Table_One a INNER JOIN Table_Two b ON (a.userid = b.userid) SET a.win = a.win+1, a.streak = a.streak+1, a.score = a.score+200, b.win = b.win+1, b.streak = b.streak+1, b.score = b.score+200 WHERE a.userid = 1 AND a.lid = 1 AND b.userid = 1</code>
在此查詢中,我們使用「INNER JOIN」語句在「userid」列上連接兩個表,確保僅更新符合的行。 “SET”子句定義兩個表的更新值。
需要注意的是,多表更新不支援「LIMIT」子句,因此這可能會更新比預期更多的行。在這種情況下,請考慮使用預存程序或事務來更精細地控制更新。
以上是如何有效更新多個具有相同值的 MySQL 表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!