ホームページ >データベース >mysql チュートリアル >複数行の挿入と更新に MySQL の ON DUPLICATE KEY UPDATE を使用するにはどうすればよいですか?
ON DUPLICATE KEY UPDATE
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 サイトの他の関連記事を参照してください。