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

Perché questo esempio di selezione per l'aggiornamento funziona?

Penso che il comportamento previsto sia un po' strano. Prima del commit db_slow, tutte le righe della tabella sono bloccate. Dopo il commit, ci sono due righe. db_fast viene sbloccato quando db_slow esegue il commit. Quindi, il comportamento è:

  1. db_slow:seleziona la riga 1 e bloccala
  2. db_slow:vedi che è solo 1 riga e aspetta
  3. db_fast:prova a selezionare la riga 1, vedi che è bloccata, aspetta
  4. db_slow:inserisci la riga con '2'
  5. db_slow:commit
  6. db_fast:sbloccato e legge 2 righe
  7. db_fast:non fa nulla
  8. Finisci con pippo:1, 2