Lorsque je crée une seule ligne INSERTdans une table comportant une AUTO_INCREMENTcolonne, j'aimerais utiliser la LAST_INSERT_ID()fonction pour renvoyer la nouvelle AUTO_INCREMENTvaleur stockée pour cette ligne.
Comme de nombreux développeurs et administrateurs de Microsoft SQL Server savent sans doute que les fonctionnalités équivalentes dans SQL Server ( SCOPE_IDENTITYet @@IDENTITY) ne se sont pas déroulées sans problèmes .
Je connais l'état de la documentation MySQL:
L'ID généré est conservé sur le serveur connexion par connexion . Cela signifie que la valeur renvoyée par la fonction à un client donné est la première
AUTO_INCREMENTvaleur générée pour la dernière instruction affectant uneAUTO_INCREMENTcolonne de ce client . Cette valeur ne peut pas être affectée par d'autres clients, même s'ils génèrentAUTO_INCREMENTleurs propres valeurs. Ce comportement garantit que chaque client peut récupérer son propre ID sans se préoccuper de l'activité des autres clients et sans avoir besoin de verrous ou de transactions.
et même aller jusqu'à dire:
L'utilisation simultanée de
LAST_INSERT_ID()et deAUTO_INCREMENTcolonnes de plusieurs clients est parfaitement valide.
Existe-t-il des risques ou des scénarios connus pouvant entraîner le LAST_INSERT_ID()non-retour de la valeur correcte?
J'utilise MySQL 5.5 sur CentOS 5.5 x64, Fedora 16 x64 et le moteur InnoDB.