Maison >base de données >tutoriel mysql >Comment l'instruction MERGE de SQL Server se compare-t-elle à la mise à jour ON DUPLICATE KEY de MySQL ?

Comment l'instruction MERGE de SQL Server se compare-t-elle à la mise à jour ON DUPLICATE KEY de MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 12:08:14440parcourir

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

Instruction MERGE de SQL Server : une alternative polyvalente à ON DUPLICATE KEY UPDATE de MySQL

Dans MySQL, la clause ON DUPLICATE KEY UPDATE permet modification des lignes existantes lors de l'insertion de données dans une table avec un index UNIQUE ou PRIMARY KEY. Bien que SQL Server n'ait pas d'équivalent exact, l'instruction MERGE offre une solution puissante et flexible pour gérer les données en double.

Présentation de l'instruction MERGE

L'instruction MERGE combine la fonctionnalité des instructions INSERT et UPDATE en une seule opération. Il évalue une condition spécifiée pour déterminer s'il convient d'insérer une nouvelle ligne ou de mettre à jour une ligne existante. La syntaxe d'une instruction MERGE de base est :

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)

Exemple d'utilisation

Pour illustrer l'utilisation de l'instruction MERGE pour gérer les données en double, considérons l'exemple suivant :

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');

Dans cet exemple, l'instruction MERGE tente d'insérer une nouvelle ligne dans MyBigDB.dbo.METER_DATA table en utilisant les données de la table source. Si une ligne avec les mêmes valeurs rtu_id et time_local existe déjà, l'instruction met à jour cette ligne avec les valeurs spécifiées pour Meter_id et Meter_reading. Sinon, l'instruction insère une nouvelle ligne dans le tableau.

Avantages de l'instruction MERGE

Par rapport à la clause ON DUPLICATE KEY UPDATE dans MySQL, l'instruction MERGE dans SQL Le serveur offre plusieurs avantages :

  • Polyvalence :Le L'instruction MERGE permet des opérations de mise à jour plus complexes en fournissant plusieurs clauses WHEN MATCHED pour mettre à jour différentes colonnes en fonction de différentes conditions.
  • Contrôle de la concurrence : L'option AVEC (HOLDLOCK) dans l'instruction MERGE garantit que la table cible est verrouillée pendant l'opération, empêchant d'autres transactions simultanées de modifier les lignes concernées.
  • Bulk Mises à jour : L'instruction MERGE peut être utilisée pour effectuer des mises à jour groupées efficacement, réduisant ainsi le nombre d'allers-retours dans la base de données requis pour les manipulations de données complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn