複数の MySQL テーブルにわたる同時更新
非正規化の目的で同一の値の更新が必要な複数のテーブルを操作する場合、実行が非効率になる可能性があります。各テーブルの個別の更新。幸いなことに、MySQL には、複数テーブルの更新を使用して、これらの更新を 1 つの操作に結合する方法が用意されています。
次のシナリオを考えてみましょう:
<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>
この例では、両方のテーブルに同じものが必要です。値は、表 2 の「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」列で 2 つのテーブルを結合します。一致する行のみが更新されるということです。 「SET」句は、両方のテーブルの更新値を定義します。
複数のテーブルの更新は「LIMIT」句をサポートしていないため、意図したよりも多くの行が更新される可能性があることに注意することが重要です。このような場合、更新をより詳細に制御するには、ストアド プロシージャまたはトランザクションの使用を検討してください。
以上が複数の MySQL テーブルを同じ値で効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。