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

Facile domanda su MySQL per quanto riguarda le chiavi primarie e un inserto

Il tuo commento di chiarimento dice che sei interessato ad assicurarti che LAST_INSERT_ID() non dia il risultato sbagliato se si verifica un altro INSERT simultaneo. Siate certi che è sicuro utilizzare LAST_INSERT_ID() indipendentemente da altre attività simultanee. LAST_INSERT_ID() restituisce solo l'ID più recente generato durante la sessione corrente.

Puoi provarlo tu stesso:

  1. Apri due finestre di shell, esegui mysqlclient in ciascuna e connettiti al database.
  2. Shell 1:INSERT in una tabella con una chiave AUTO_INCREMENT.
  3. Shell 1:SELECT LAST_INSERT_ID(), vedi risultato.
  4. Shell 2:INSERT nella stessa tabella.
  5. Shell 2:SELECT LAST_INSERT_ID(), vedi risultato diverso dalla shell 1.
  6. Shell 1:SELECT LAST_INSERT_ID() di nuovo, vedi una ripetizione del risultato precedente.

Se ci pensi, questo è l'unico modo che ha senso. Tutti i database che supportano i meccanismi di incremento automatico delle chiavi devono agire in questo modo. Se il risultato dipende da una race condition con altri client eventualmente INSERT contemporaneamente, non ci sarebbe un modo affidabile per ottenere l'ultimo valore ID inserito nella sessione corrente.