Maison >base de données >tutoriel mysql >Comment puis-je récupérer l'ID d'une ligne affectée après une INSERT ON DUPLICATE KEY UPDATE dans MySQL ?

Comment puis-je récupérer l'ID d'une ligne affectée après une INSERT ON DUPLICATE KEY UPDATE dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-04 18:19:151007parcourir

How Can I Retrieve the ID of an Affected Row After an INSERT ON DUPLICATE KEY UPDATE in MySQL?

Récupération de l'ID pour les mises à jour ON DUPLICATE KEY dans MySQL

Lors de l'exécution d'une requête INSERT ON DUPLICATE KEY, obtention de l'ID de la ligne affectée peut être un défi. Traditionnellement, cela nécessite l'exécution d'une requête distincte, car LAST_INSERT_ID() ne renvoie généralement que l'ID des lignes nouvellement insérées.

Cependant, il existe une solution de contournement qui exploite la fonction LAST_INSERT_ID(expr). En passant une expression à cette fonction, vous pouvez rendre sa sortie significative même pour les lignes mises à jour.

La solution

Pour récupérer l'ID de la ligne insérée ou mise à jour en utilisant une seule requête :

  1. Assurez-vous que votre table comporte une colonne AUTO_INCREMENT, telle que id.
  2. Utilisez ce qui suit syntaxe de requête :
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE>

En définissant la colonne id sur LAST_INSERT_ID(id) dans la clause UPDATE, MySQL stockera la nouvelle valeur AUTO_INCREMENT dans la colonne id pour les lignes insérées et mises à jour.

Cela vous permet de récupérer l'ID de l'opération la plus récente (soit une insertion, soit une mise à jour) en appelant simplement LAST_INSERT_ID(). Il combine efficacement les fonctionnalités des instructions INSERT et UPDATE en une seule requête.

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