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

MySQL:aggiornamenti simultanei (tramite thread) su una semplice tabella

Il blocco è implicito, sì, ma non viene eseguito da executeUpdate() . Il motore di archiviazione in MySQL gestisce il blocco e lo sblocco.

Ogni volta che scrivi su una tabella MyISAM, la tua query attende che il blocco di scrittura sulla tabella sia disponibile, il blocco di scrittura viene acquisito, la scrittura viene eseguita e il blocco di scrittura viene rilasciato. Non esiste una vera concorrenza di scrittura in MyISAM perché ogni lavoratore è in effetti in attesa in linea per il blocco di scrittura. Non ricevi un errore perché le richieste di scrittura sono serializzate.

La situazione con InnoDB è simile ma molto diversa, in quanto InnoDB blocca solo una parte della tabella, in genere a livello di riga, dove InnoDB può bloccare un intervallo all'interno di un indice, bloccando così le righe in quell'intervallo nell'indice (e il divario che li precede). Questo blocco è più granulare del blocco della tabella, consentendo un comportamento di concorrenza migliorato, ma non vi è alcuna operazione simultanea sulla stessa riga:ogni lavoratore attende il blocco o i blocchi di cui ha bisogno.

In entrambi i casi, i lock vengono presi implicitamente.