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 :
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!