Renvoi du dernier ID d'insertion dans les instructions INSERT multi-lignes à l'aide de LAST_INSERT_ID() dans MySQL
Lors de l'exécution de plusieurs insertions d'enregistrements dans MySQL, comprendre le comportement de la fonction LAST_INSERT_ID() devient crucial. Contrairement aux insertions sur une seule ligne où elle fournit l'ID de la ligne insérée, LAST_INSERT_ID() se comporte différemment avec les instructions INSERT à plusieurs lignes.
Par exemple, considérons la requête suivante :
INSERT INTO people (name, age) VALUES ('William', 25), ('Bart', 15), ('Mary', 12);
Après avoir exécuté cette instruction, on pourrait s'attendre à ce que la fonction LAST_INSERT_ID() renvoie l'ID de la dernière ligne insérée (3). Cependant, le comportement de LAST_INSERT_ID() diverge de cette attente.
LAST_INSERT_ID() renvoie le premier ID d'insertion
Dans le contexte d'instructions INSERT à enregistrements multiples, LAST_INSERT_ID( ) renvoie l'ID généré pour la première ligne insérée uniquement. Ce comportement est explicitement documenté dans la documentation de MySQL :
Important If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only.
Cette décision de conception garantit que la même instruction INSERT peut être facilement reproduite sur un autre serveur sans aucun problème. En utilisant l'ID de la première ligne insérée, reproduire le comportement souhaité devient simple.
Implications pour la conception du code
Comprendre ce comportement est crucial lors de la conception d'un code qui s'appuie sur la fonction LAST_INSERT_ID() pour les insertions multi-lignes. Les développeurs doivent éviter de s'appuyer sur LAST_INSERT_ID() pour déterminer les ID spécifiques des lignes insérées dans de tels scénarios. Des approches alternatives pour suivre ou accéder aux ID de ligne dans les insertions sur plusieurs lignes doivent être envisagées.
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!