sql >> Database teknologi >  >> RDS >> Mysql

Nemt mysql-spørgsmål vedrørende primærnøgler og en indsættelse

Din afklaringskommentar siger, at du er interesseret i at sikre dig, at LAST_INSERT_ID() ikke giver det forkerte resultat, hvis der sker en anden samtidig INSERT. Du kan være sikker på, at det er sikkert at bruge LAST_INSERT_ID() uanset anden samtidig aktivitet. LAST_INSERT_ID() returnerer kun det seneste ID, der er genereret under den aktuelle session.

Du kan prøve det selv:

  1. Åbn to shell-vinduer, kør mysqlclient i hver og opret forbindelse til databasen.
  2. Shell 1:INDSÆT i en tabel med en AUTO_INCREMENT-nøgle.
  3. Shell 1:VÆLG LAST_INSERT_ID(), se resultat.
  4. Shell 2:INDSÆT i den samme tabel.
  5. Shell 2:VÆLG LAST_INSERT_ID(), se resultat forskelligt fra shell 1.
  6. Shell 1:VÆLG LAST_INSERT_ID()igen, se en gentagelse af tidligere resultat.

Hvis du tænker over det, er dette den eneste måde, der giver mening. Alle databaser, der understøtter auto-inkrementering af nøglemekanismer, skal handle på denne måde. Hvis resultatet afhænger af en løbstilstand med andre klienter, der muligvis INDSÆTTER samtidigt, så ville der ikke være nogen pålidelig måde at få den sidst indsatte ID-værdi i din nuværende session.



  1. varchar2(n BYTE|CHAR) standard -> CHAR eller BYTE

  2. Langsom forespørgsel på information_schema.tables

  3. Hvorfor du skal begrænse brugeradgang til din database

  4. hash en SQL række?