Gleichzeitige Aktualisierungen über mehrere MySQL-Tabellen hinweg
Beim Arbeiten mit mehreren Tabellen, die identische Wertaktualisierungen für Denormalisierungszwecke erfordern, kann die Durchführung ineffizient sein separate Aktualisierungen für jede Tabelle. Glücklicherweise bietet MySQL eine Methode, um diese Aktualisierungen mithilfe einer Aktualisierung mehrerer Tabellen in einem einzigen Vorgang zu kombinieren.
Stellen Sie sich das folgende Szenario vor:
<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>
In diesem Beispiel erfordern beide Tabellen dasselbe Wertaktualisierungen, mit Ausnahme des Fehlens des Felds „lid“ in Tabelle 2. Um diese Updates zu kombinieren, können wir ein Multi-Table-Update wie folgt verwenden:
<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>
In dieser Abfrage verwenden wir die „INNER JOIN“-Anweisung, um die beiden Tabellen in der „userid“-Spalte zu verbinden und so sicherzustellen dass nur übereinstimmende Zeilen aktualisiert werden. Die „SET“-Klausel definiert die Aktualisierungswerte für beide Tabellen.
Es ist wichtig zu beachten, dass Multi-Table-Updates die „LIMIT“-Klausel nicht unterstützen, sodass dadurch möglicherweise mehr Zeilen als beabsichtigt aktualisiert werden könnten. Erwägen Sie in solchen Fällen die Verwendung gespeicherter Prozeduren oder Transaktionen für eine detailliertere Kontrolle über die Aktualisierungen.
Das obige ist der detaillierte Inhalt vonWie kann ich mehrere MySQL-Tabellen effizient mit identischen Werten aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!