ホームページ >データベース >mysql チュートリアル >複数行の挿入と更新に MySQL の ON DUPLICATE KEY UPDATE を使用するにはどうすればよいですか?

複数行の挿入と更新に MySQL の ON DUPLICATE KEY UPDATE を使用するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-11 07:06:45461ブラウズ

How Can I Use MySQL's ON DUPLICATE KEY UPDATE for Multiple Row Inserts and Updates?

ON DUPLICATE KEY UPDATE

を使用した MySQL への複数の行の効率的な挿入と更新

MySQL の ON DUPLICATE KEY UPDATE 句は、単一のクエリ内の複数の行に対して挿入操作と更新操作の両方を実行するための効率的な方法を提供します。 これは、一意のキーを処理し、エラーを防止し、データの一貫性を確保する場合に特に役立ちます。

シナリオ:

テーブルに複数の行を挿入する必要があるが、一意のキー値が重複しているために一部の行がすでに存在している可能性があるというシナリオを考えてみましょう。 エラーを生成する代わりに、既存の行を新しいデータで更新したいと考えています。

例:

beautiful という名前のテーブルに複数の行を挿入するように設計された次の SQL ステートメントがあるとします。

<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29);</code>

name が一意のキーであり、いくつかの名前がす​​でに存在する場合、このクエリは失敗します。 これを処理するには、ON DUPLICATE KEY UPDATE を利用します。

解決策:

ON DUPLICATE KEY UPDATE 句を INSERT ステートメントに追加します。

<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>

この変更されたクエリは、nameが一意である場所に新しい行を挿入します。 重複する name が見つかった場合、age 列のみが VALUES 句で指定された値に更新されます。

最新の構文 (MySQL 8.0.19 以降):

MySQL 8.0.19 以降のバージョンでは、エイリアスを使用したより読みやすいアプローチが提供されます。

<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) AS new ON DUPLICATE KEY UPDATE age = new.age;</code>

ここで、AS new は新しい行にエイリアスを割り当て、そのフィールド (例: new.age) を明確に参照できるようにします。

古い構文 (8.0.19 より前の MySQL バージョン):

古い MySQL バージョンの場合、挿入される値を参照するために VALUES キーワードが使用されます。

<code class="language-sql">INSERT INTO beautiful (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22), ('Hui Ling', 25), ('Yumie', 29) ON DUPLICATE KEY UPDATE age = VALUES(age);</code>

ON DUPLICATE KEY UPDATE を使用すると、単一の SQL ステートメント内で挿入と更新の両方を効率的に管理でき、コードが簡素化され、データベースのパフォーマンスが向上します。

以上が複数行の挿入と更新に MySQL の ON DUPLICATE KEY UPDATE を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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