ホームページ >データベース >mysql チュートリアル >SQL Server の MERGE ステートメントは MySQL の ON DUPLICATE KEY UPDATE とどう違うのですか?

SQL Server の MERGE ステートメントは MySQL の ON DUPLICATE KEY UPDATE とどう違うのですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 12:08:14489ブラウズ

How Does SQL Server's MERGE Statement Compare to MySQL's ON DUPLICATE KEY UPDATE?

SQL Server の MERGE ステートメント: MySQL の ON DUPLICATE KEY UPDATE の多用途な代替手段

MySQL では、ON DUPLICATE KEY UPDATE 句により、 UNIQUE インデックスを持つテーブルにデータを挿入するときの既存の行の変更、または主キー。 SQL Server にはまったく同等のものはありませんが、MERGE ステートメントは、重複データを処理するための強力かつ柔軟なソリューションを提供します。

MERGE ステートメントの紹介

MERGE ステートメントは、次のことを組み合わせたものです。 INSERT ステートメントと UPDATE ステートメントの機能を 1 つの操作に統合します。指定された条件を評価して、新しい行を挿入するか既存の行を更新するかを決定します。基本的な MERGE ステートメントの構文は次のとおりです。

MERGE INTO target_table AS target
USING source_table AS source
ON (target.column_name = source.column_name)
WHEN MATCHED THEN
    UPDATE SET target.column_name = source.column_name
WHEN NOT MATCHED THEN
    INSERT (target.column_names) VALUES (source.column_values)

使用例

重複データを処理するための MERGE ステートメントの使用法を説明するために、次の例を考えてみましょう。

MERGE
INTO MyBigDB.dbo.METER_DATA WITH (HOLDLOCK) AS target
USING (SELECT
    77748 AS rtu_id
   ,'12B096876' AS meter_id
   ,56112 AS meter_reading
   ,'20150602 00:20:11' AS time_local) AS source
(rtu_id, meter_id, meter_reading, time_local)
ON (target.rtu_id = source.rtu_id
  AND target.time_local = source.time_local)
WHEN MATCHED
  THEN UPDATE
      SET meter_id = '12B096876'
         ,meter_reading = 56112
WHEN NOT MATCHED
  THEN INSERT (rtu_id, meter_id, meter_reading, time_local)
      VALUES (77748, '12B096876', 56112, '20150602 00:20:11');

この例では、MERGE ステートメントは新しい行をソーステーブルのデータを使用する MyBigDB.dbo.METER_DATA テーブル。同じ rtu_id と time_local 値を持つ行がすでに存在する場合、ステートメントは指定された meter_id と meter_reading の値でその行を更新します。それ以外の場合、ステートメントはテーブルに新しい行を挿入します。

MERGE ステートメントの利点

MySQL の ON DUPLICATE KEY UPDATE 句よりも、SQL の MERGE ステートメントサーバーはいくつかの機能を提供します利点:

  • 汎用性: MERGE ステートメントでは、複数の WHEN MATCHED 句を指定して、さまざまな条件に基づいてさまざまな列を更新することで、より複雑な更新操作が可能になります。
  • 同時実行制御: MERGE ステートメントの WITH (HOLDLOCK) オプションにより、ターゲット テーブルは操作中にロックされ、他の同時トランザクションが影響を受ける行を変更するのを防ぎます。
  • 一括更新: MERGE ステートメントを使用すると、一括更新を効率的に実行し、データベースの数を減らすことができます。複雑なデータ操作にはラウンドトリップが必要です。

以上がSQL Server の MERGE ステートメントは MySQL の ON DUPLICATE KEY UPDATE とどう違うのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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