Votre commentaire de clarification indique que vous êtes intéressé à vous assurer que LAST_INSERT_ID() ne donne pas le mauvais résultat si un autre INSERT concurrent se produit. Soyez assuré qu'il est sécuritaire d'utiliser LAST_INSERT_ID() indépendamment des autres activités concurrentes. LAST_INSERT_ID() renvoie uniquement l'ID le plus récent généré pendant la session en cours.
Vous pouvez essayer vous-même:
- Ouvrez deux fenêtres shell, exécutez client mysql dans chaque base de données et se connecter à . Shell 1: INSERT dans une table avec une clé AUTO_INCREMENT . Shell 1: SELECT LAST_INSERT_ID(), voir le résultat.
- Shell 2: INSERT dans la même table.
- Shell 2: SELECT LAST_INSERT_ID(), voir résultat différent de coque 1.
- Shell 1: SELECT LAST_INSERT_ID() à nouveau, voir une répétition de résultat plus tôt.
Si vous y pensez, c'est le seul moyen logique. Toutes les bases de données qui prennent en charge les mécanismes de clé auto-incrémentés doivent agir de cette manière. Si le résultat dépend d'une condition de concurrence avec d'autres clients éventuellement INSÉRER simultanément, il n'y aurait aucun moyen fiable d'obtenir la dernière valeur d'ID insérée dans votre session en cours.
Clarification: Le code a alors un last_insert_id. Deux de ces EXECUTE presque en même temps et l'ordre exec se transforme en insert # 1 insert # 2 LAST_INSERT_ID # 1 Remplit et renvoie l'ID de insert # 2 LAST_INSERT_ID # 2 Remplit et renvoie l'ID de insert # 2 Est-ce que cela peut arriver? – MPX