sql >> Database >  >> RDS >> Mysql

Eenvoudige mysql-vraag over primaire sleutels en een insert

Uw verduidelijkende opmerking zegt dat u er zeker van wilt zijn dat LAST_INSERT_ID() niet het verkeerde resultaat geeft als er nog een gelijktijdige INSERT plaatsvindt. U kunt er zeker van zijn dat het veilig is om LAST_INSERT_ID() te gebruiken, ongeacht andere gelijktijdige activiteiten. LAST_INSERT_ID() retourneert alleen de meest recente ID die tijdens de huidige sessie is gegenereerd.

Je kunt het zelf proberen:

  1. Open twee shell-vensters, voer in elk mysqlclient uit en maak verbinding met de database.
  2. Shell 1:INSERT in een tabel met een AUTO_INCREMENT-sleutel.
  3. Shell 1:SELECT LAST_INSERT_ID(), zie resultaat.
  4. Shell 2:INSERT in dezelfde tabel.
  5. Shell 2:SELECT LAST_INSERT_ID(), zie resultaat anders dan shell 1.
  6. Shell 1:SELECT LAST_INSERT_ID()nogmaals, zie een herhaling van eerder resultaat.

Als je erover nadenkt, is dit de enige manier die logisch is. Alle databases die auto-incrementing key-mechanismen ondersteunen, moeten op deze manier werken. Als het resultaat afhangt van een raceconditie waarbij andere clients mogelijk gelijktijdig INSERT, is er geen betrouwbare manier om de laatst ingevoegde ID-waarde in uw huidige sessie te krijgen.



  1. De volgorde van rijen in een MySQL-tabel wijzigen

  2. Top 30 meest bruikbare gelijktijdige manager-query's

  3. NVL2() Functie in Oracle

  4. MySQL - Groepeer en totaal, maar retourneer alle rijen in elke groep