ホームページ >データベース >mysql チュートリアル >MySQL の INSERT ... ON DUPLICATE KEY UPDATE はどのようにして条件付きの挿入と更新を簡素化できるのでしょうか?

MySQL の INSERT ... ON DUPLICATE KEY UPDATE はどのようにして条件付きの挿入と更新を簡素化できるのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-21 12:04:14241ブラウズ

How Can MySQL's INSERT ... ON DUPLICATE KEY UPDATE Simplify Conditional Inserts and Updates?

MySQL の INSERT ... ON DUPLICATE KEY UPDATE ステートメント: 簡素化された条件付き挿入と更新

MySQL などのリレーショナル データベースを使用する場合、条件付きで挿入または更新操作を実行する必要がある場合があります。これは、レコードが存在しない場合は新しいレコードを作成する必要がある場合、またはレコードが既に存在する場合は更新する必要がある場合に発生します。従来のアプローチでは、SELECT クエリと INSERT クエリまたは UPDATE クエリを組み合わせて使用​​しますが、複雑で非効率になる可能性があります。

幸いなことに、MySQL は、INSERT ... ON DUPLICATE KEY UPDATE ステートメントというより洗練されたソリューションを提供します。この多用途コマンドを使用すると、レコードが存在しない場合に行を挿入したり、同じキーを持つ行がテーブル内にすでに存在する場合に行を更新したりすることができます。

文法:

<code class="language-sql">INSERT INTO `table_name` (`column_list`)
VALUES (`value_list`)
ON DUPLICATE KEY UPDATE `column_name` = `new_value`</code>

仕組み:

  • クエリは標準の INSERT 構文に従い、ターゲット テーブルを指定し、列とそれに対応する値のリストを提供します。
  • 一致する主キーまたは一意のキー値を持つ行が存在しない場合は、テーブルに新しい行を挿入します。
  • 同じキー値を持つ行が存在する場合、ON DUPLICATE KEY UPDATE 句は、指定された値のどの値でどの列を更新するかを指定します。

例:

次の例を考えてみましょう:

<code class="language-sql">INSERT INTO `usage`
(`thing_id`, `times_used`, `first_time_used`)
VALUES
(4815162342, 1, NOW())
ON DUPLICATE KEY UPDATE
`times_used` = `times_used` + 1</code>
  • thing_id に存在しない主キー値 4815162342 がある場合は、指定された値を使用して usage テーブルに新しい行を挿入します。
  • thing_id の主キー値 4815162342 がすでに存在する場合は、現在の値に 1 を加えて times_used 列を更新します。

利点:

  • 簡略化された構文: INSERT ... ON DUPLICATE KEY UPDATE は、単一のクエリを使用して挿入および更新操作を実行するための簡潔かつ明確な方法を提供します。
  • 効率: 既存のレコードをチェックするための不必要な SELECT クエリを回避し、データベースのワークロードを軽減し、パフォーマンスを向上させます。
  • インポテンス: この操作はべき等です。つまり、複数回実行してもデータは変更されず、エラーも発生しません。これにより、コード処理が簡素化され、データの整合性が確保されます。

以上がMySQL の INSERT ... ON DUPLICATE KEY UPDATE はどのようにして条件付きの挿入と更新を簡素化できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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