Maison >base de données >tutoriel mysql >Comment puis-je effectuer efficacement des upserts dans MySQL avec la gestion des clés en double ?

Comment puis-je effectuer efficacement des upserts dans MySQL avec la gestion des clés en double ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-08 13:41:111015parcourir

How Can I Efficiently Perform Upserts in MySQL with Duplicate Key Handling?

Requête Upsert efficace pour la mise à jour de clé en double

Lors de l'insertion de données dans une table MySQL avec un index unique, il est souvent nécessaire de mettre à jour une table existante enregistrer si la clé existe déjà. Pour ce faire, une clause "ON DUPLICATE KEY UPDATE" est généralement utilisée, spécifiant les champs à modifier. Cependant, spécifier à nouveau tous les champs peut s'avérer inefficace.

Syntaxe alternative

Une approche plus simple consiste à utiliser la fonction VALUES(), comme indiqué ci-dessous :

INSERT INTO table (id,a,b,c,d,e,f,g) VALUES (1,2,3,4,5,6,7,8) 
ON DUPLICATE KEY UPDATE a=VALUES(a),b=VALUES(b),c=VALUES(c),d=VALUES(d),e=VALUES(e),f=VALUES(f),g=VALUES(g);

Cette syntaxe évite d'avoir à spécifier chaque champ deux fois, ce qui rend la requête plus concis.

Envisagez d'éviter les mises à jour

Il est important de noter que la mise à jour des champs avec les mêmes valeurs qu'ils ont déjà n'est pas nécessaire. Si l'enregistrement existant contient déjà les mêmes données que l'insertion, il n'est pas nécessaire d'effectuer une mise à jour. La syntaxe suivante peut être utilisée pour éviter les mises à jour inutiles :

INSERT INTO table (id,a,b,c,d,e,f,g)
VALUES (1,2,3,4,5,6,7,8) 
ON DUPLICATE KEY
    UPDATE a=a, b=b, c=c, d=d, e=e, f=f, g=g;

Récupération de l'ID du dernier insert

Pour obtenir l'ID de l'enregistrement nouvellement inséré ou mis à jour, le la syntaxe dépend de l'application backend utilisée. Par exemple, dans LuaSQL, la fonction conn:getlastautoid() peut être utilisée pour récupérer la valeur.

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