ホームページ >データベース >mysql チュートリアル >MySQL の「ON DUPLICATE KEY UPDATE」句を効率的に使用するにはどうすればよいですか?

MySQL の「ON DUPLICATE KEY UPDATE」句を効率的に使用するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 00:30:13491ブラウズ

How Can I Efficiently Use MySQL's `ON DUPLICATE KEY UPDATE` Clause?

「ON DUPLICATE KEY UPDATE」の効率的な使用

データベース操作を実行するとき、重複キーのシナリオがよく発生します。このような場合、新しい行を挿入するか、同じキーを使用して既存の行を更新することができます。この記事では、重複キーを処理するための MySQL の "ON DUPLICATE KEY UPDATE" 句の使用について説明します。

問題

次の MySQL クエリを考えてみましょう:

INSERT INTO table (id, a, b, c, d, e, f, g) VALUES (1, 2, 3, 4, 5, 6, 7, 8)

フィールド ID には一意のインデックスがあり、ID 値が重複できないことを意味します。同じ ID を持つ行がデータベースにすでに存在する場合、新しい行を挿入する代わりにそれを更新したいとします。ただし、「ON DUPLICATE KEY UPDATE」の原因ですべてのフィールド値を再指定すると、非効率的かつ反復的になる可能性があります。

考えられる解決策

  • すべてのフィールド値の指定:
    1 つのオプションは、すべてのフィールドを指定することです。以下に示すように、「ON DUPLICATE KEY UPDATE」句の値を指定します:
INSERT INTO table (id, a, b, c, d, e, f, g) VALUES (1, 2, 3, 4, 5, 6, 7, 8)
ON DUPLICATE KEY UPDATE a=2, b=3, c=4, d=5, e=6, f=7, g=8

ただし、この方法は、特に多くの列を持つテーブルの場合、面倒でエラーが発生しやすいため、お勧めできません。 .

  • を使用するVALUES(a) 構文:**
    より効率的なアプローチは、VALUES() 構文を使用することです:
INSERT INTO table (id, a, b, c, d, e, f, g) VALUES (1, 2, 3, 4, 5, 6, 7, 8)
ON DUPLICATE KEY UPDATE a=VALUES(a), b=VALUES(b), c=VALUES(c), d=VALUES(d), e=VALUES(e), f=VALUES(f), g=VALUES(g)

この構文は、 「ON DUPLICATE KEY UPDATE」で指定された列

  • クエリの簡略化:
    挿入または更新する値が同じ場合は、クエリをさらに簡略化できます:
INSERT INTO table (id, a, b, c, d, e, f, g)
VALUES (1, 2, 3, 4, 5, 6, 7, 8)
ON DUPLICATE KEY
    UPDATE a=a, b=b, c=c, d=d, e=e, f=f, g=g;

最後に挿入されたものの取得ID

LAST_INSERT_ID() 関数を使用して、最後に挿入された行の ID を取得できます。この機能の使用方法は、使用しているバックエンド アプリによって異なる場合があります。たとえば、LuaSQL では、conn:getlastautoid() メソッドが値を取得します。

以上がMySQL の「ON DUPLICATE KEY UPDATE」句を効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。