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

Blocco MySQL in errore chiave duplicata

Penso che tu stia semplificando la terminologia/il processo. Dopo che la query è stata analizzata e prima che venga eseguita, è necessario acquisire i blocchi necessari. È a questo punto che si determina che:

  • La sessione 1 ottiene il blocco esclusivo, perché si sta inserendo e non ci sono altri blocchi
  • Le sessioni 2 e 3 vengono messe in coda per il blocco condiviso perché il blocco esclusivo è già trattenuto dalla sessione 1 e le sessioni 2 e 3 presentano un errore di chiave duplicata

Per quanto sopra, le sessioni 2 e 3 vengono messe in coda per i blocchi condivisi perché sono in errore di chiave duplicata. Tuttavia, quando la sessione 1 elimina la chiave e rilascia il blocco esclusivo, ora entrambe le sessioni 2 e 3 ottengono i blocchi condivisi. A questo punto entrambi provano ad acquisire un lucchetto esclusivo per completare l'inserto. Nessuno dei due può, però, perché l'altro ha già il blocco condiviso. Quindi nemmeno il blocco esclusivo viene concesso e si bloccano.