Mysql
 sql >> Base de données >  >> RDS >> Mysql

Question mysql facile concernant les clés primaires et un insert

Votre commentaire de clarification indique que vous souhaitez vous assurer que LAST_INSERT_ID() ne donne pas le mauvais résultat si un autre INSERT simultané se produit. Soyez assuré qu'il est sûr d'utiliser LAST_INSERT_ID() indépendamment de toute autre activité simultanée. LAST_INSERT_ID() renvoie uniquement l'identifiant le plus récent généré pendant la session en cours.

Vous pouvez l'essayer vous-même :

  1. Ouvrez deux fenêtres shell, exécutez mysqlclient dans chacune et connectez-vous à la base de données.
  2. Shell 1 :INSERT dans une table avec une clé AUTO_INCREMENT.
  3. Shell 1 :SELECT LAST_INSERT_ID(), voir le résultat.
  4. Shell 2 :INSERT dans la même table.
  5. Shell 2 :SELECT LAST_INSERT_ID(), voir le résultat différent du shell 1.
  6. Shell 1 :SELECT LAST_INSERT_ID() à nouveau, voir une répétition du résultat précédent.

Si vous y réfléchissez, c'est la seule façon qui a du sens. Toutes les bases de données qui prennent en charge les mécanismes de clé à incrémentation automatique doivent agir de cette manière. Si le résultat dépend d'une condition de concurrence avec d'autres clients pouvant INSÉRER simultanément, il n'y aurait alors aucun moyen fiable d'obtenir la dernière valeur d'ID insérée dans votre session en cours.