Maison > base de données > tutoriel mysql > Comment puis-je effectuer efficacement des opérations UPSERT avec plusieurs colonnes dans SQL ?

Comment puis-je effectuer efficacement des opérations UPSERT avec plusieurs colonnes dans SQL ?

Susan Sarandon
Libérer: 2024-12-10 20:29:14
original
375 Les gens l'ont consulté

How Can I Efficiently Perform UPSERT Operations with Multiple Columns in SQL?

Effectuer UPSERT avec plusieurs colonnes à l'aide de INSERT...ON DUPLICATE KEY UPDATE

Pour effectuer une opération UPSERT (insérer de nouvelles lignes ou mettre à jour des lignes existantes lignes) tout en prenant en compte les valeurs nouvelles et existantes dans la partie mise à jour, l'instruction INSERT...ON DUPLICATE KEY UPDATE est couramment utilisée. Cette technique vous permet de gérer différents scénarios selon qu'un enregistrement avec la clé primaire spécifiée existe ou non.

Exemple simple

Considérez une table nommée Item avec des colonnes Item_Name (clé primaire) et Items_In_Stock contenant les inventaires. Lors de la réception d'un article, la logique suivante s'applique :

  • Si l'article n'existe pas, insérez un nouvel enregistrement avec la quantité fournie.
  • Si l'article existe, mettez à jour la colonne Items_In_Stock en ajoutant la nouvelle quantité à la valeur existante.

Une approche naïve impliquerait d'utiliser plusieurs instructions SELECT dans la partie UPDATE pour récupérer le nombre existant, comme dans l'exemple suivant :

INSERT INTO `item`
(`item_name`, items_in_stock)
VALUES('A', 27)
ON DUPLICATE KEY UPDATE
`new_items_count` = 27 + (SELECT items_in_stock where item_name = 'A')
Copier après la connexion

Solution améliorée

Cependant, cette approche peut être inutilement complexe. PostgreSQL vous permet de référencer les valeurs de la ligne qui a déclenché la condition ON DUPLICATE KEY directement dans la clause UPDATE. Par conséquent, vous pouvez simplifier l'instruction comme suit :

INSERT INTO `item`
(`item_name`, items_in_stock)
VALUES( 'A', 27)
ON DUPLICATE KEY UPDATE
`new_items_count` = `new_items_count` + 27
Copier après la connexion

Cette instruction optimisée évite la surcharge des requêtes SELECT supplémentaires et garde le code plus concis et élégant.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal