Lorsque je crée une seule ligne INSERT
dans une table comportant une AUTO_INCREMENT
colonne, j'aimerais utiliser la LAST_INSERT_ID()
fonction pour renvoyer la nouvelle AUTO_INCREMENT
valeur 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_IDENTITY
et @@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_INCREMENT
valeur générée pour la dernière instruction affectant uneAUTO_INCREMENT
colonne de ce client . Cette valeur ne peut pas être affectée par d'autres clients, même s'ils génèrentAUTO_INCREMENT
leurs 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_INCREMENT
colonnes 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.