sql >> Databasteknik >  >> RDS >> Mysql

Enkel mysql-fråga angående primärnycklar och en infogning

Din förtydligande kommentar säger att du är intresserad av att se till att LAST_INSERT_ID() inte ger fel resultat om ytterligare en INSERT sker samtidigt. Du kan vara säker på att det är säkert att använda LAST_INSERT_ID() oavsett annan samtidig aktivitet. LAST_INSERT_ID() returnerar endast det senaste ID som genererats under den aktuella sessionen.

Du kan prova själv:

  1. Öppna två skalfönster, kör mysqlclient i varje och anslut till databasen.
  2. Shell 1:INFOGA i en tabell med en AUTO_INCREMENT-nyckel.
  3. Shell 1:VÄLJ LAST_INSERT_ID(), se resultat.
  4. Shell 2:INFOGA i samma tabell.
  5. Shell 2:VÄLJ LAST_INSERT_ID(), se resultat som skiljer sig från skal 1.
  6. Shell 1:SELECT LAST_INSERT_ID()igen, se en upprepning av tidigare resultat.

Om du tänker efter är detta det enda vettiga sättet. Alla databaser som stöder autoinkrementerande nyckelmekanismer måste agera på detta sätt. Om resultatet beror på ett tävlingstillstånd med andra klienter som möjligen INSERT samtidigt, skulle det inte finnas något pålitligt sätt att få det senast infogade ID-värdet i din nuvarande session.



  1. Hur roterar man PgBouncer-loggar i Linux/Windows?

  2. Viloläge Skapa kriterier för att gå med i samma tabell två gånger - försökte 2 tillvägagångssätt med 2 skillnadsfel

  3. alternativ till mysql_field_name i mysqli

  4. Uppdaterar post UTAN att uppdatera tidsstämpel