Maison >base de données >tutoriel mysql >Existe-t-il un serveur SQL équivalent à la mise à jour de clé en double de MySQL ?

Existe-t-il un serveur SQL équivalent à la mise à jour de clé en double de MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-15 18:41:11397parcourir

Is There an SQL Server Equivalent to MySQL's ON DUPLICATE KEY UPDATE?

SQL Server offre-t-il une fonctionnalité similaire à ON DUPLICATE KEY UPDATE de MySQL ?

Dans MySQL, ON DUPLICATE KEY UPDATE permet la mise à jour automatique d'une ligne lorsqu'une insertion provoquerait une valeur en double dans un index unique ou une clé primaire. Dans SQL Server, l'équivalent le plus proche de cette fonctionnalité est l'instruction MERGE.

Utilisation de MERGE pour mettre à jour ou insérer

L'instruction MERGE combine les fonctionnalités d'INSERT, UPDATE, et DELETE en une seule opération. Il peut être utilisé pour :

  • Mettre à jour les lignes existantes qui correspondent à une condition spécifiée
  • Insérer de nouvelles lignes si aucune ligne correspondante n'est trouvée

Exemple

Considérons la requête suivante, qui tente d'insérer une ligne dans une table si la ligne n'existe pas déjà :

INSERT INTO MyTable (Id, Name) VALUES (1, 'John Doe')

Si une ligne avec l'ID 1 existe déjà, cette requête échouera en raison d'une violation de clé primaire. Cependant, nous pouvons utiliser MERGE pour gérer ce scénario :

MERGE INTO MyTable WITH (HOLDLOCK) AS target
USING (SELECT 1 AS Id, 'John Doe' AS Name) AS source
(Id, Name)
ON (target.Id = source.Id)
WHEN MATCHED
  THEN UPDATE
  SET Name = source.Name
WHEN NOT MATCHED
  THEN INSERT (Id, Name)
  VALUES (source.Id, source.Name);

Dans cet exemple, l'instruction MERGE effectuera les actions suivantes :

  • Vérifier si une ligne avec l'ID 1 existe dans la table cible.
  • Si une ligne correspondante existe, mettez à jour la colonne Nom avec John Doe.
  • Si aucune ligne correspondante existe, insérez une nouvelle ligne avec l'ID 1 et le nom John Doe.

La clause WITH (HOLDLOCK) garantit que la table cible est verrouillée pendant l'opération pour empêcher les mises à jour simultanées de provoquer des problèmes de cohérence des données.

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