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
Susan Sarandonoriginal
2024-12-10 20:29:14386parcourir

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

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

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!

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