Comprendre le comportement de LAST_INSERT_ID() avec plusieurs insertions d'enregistrements
Lorsque vous traitez des insertions de plusieurs enregistrements dans MySQL, il est essentiel de comprendre le comportement du Fonction LAST_INSERT_ID(). Contrairement aux insertions à enregistrement unique, LAST_INSERT_ID() présente un comportement distinct lorsqu'il est utilisé avec des instructions d'insertion à enregistrements multiples.
Comportement attendu
Intuitivement, on pourrait s'attendre à ce que LAST_INSERT_ID( ) pour renvoyer le dernier ID inséré pour une insertion de plusieurs enregistrements. Cependant, ce n'est pas le cas.
Comportement réel
Comme documenté dans la documentation MySQL, LAST_INSERT_ID() renverra l'ID généré pour uniquement le premier row inséré dans une instruction d'insertion à enregistrements multiples. Ceci est délibéré pour permettre la reproduction facile de la même instruction sur différents serveurs.
Par exemple, considérons l'instruction d'insertion à enregistrements multiples suivante :
INSERT INTO people (name,age) VALUES ('William',25), ('Bart',15), ('Mary',12);
Même si elle insère trois lignes, la LAST_INSERT_ID() renverra l'ID de « William », car il représente le premier enregistrement inséré.
Implications pour Code
Ce comportement a des implications pour votre code. Si vous comptez sur LAST_INSERT_ID() pour capturer les ID de tous les enregistrements insérés dans une insertion de plusieurs enregistrements, vous n'obtiendrez que l'ID du premier enregistrement. Pour récupérer avec précision les ID de tous les enregistrements insérés, vous pouvez utiliser la clause RETURNING conjointement avec l'instruction INSERT ou envisager des approches alternatives telles que l'utilisation d'une boucle pour insérer les enregistrements un par un.
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!