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

Concorrenza MySQL, come funziona e devo gestirla nella mia applicazione

Le istruzioni SQL sono atomiche. Cioè, se esegui qualcosa del genere:

UPDATE Cars SET Sold = Sold + 1

Nessuno può cambiare il Sold variabile durante questa affermazione. Viene sempre incrementato di 1, anche se qualcun altro esegue la stessa istruzione contemporaneamente.

Il problema si verifica se hai istruzioni che dipendono l'una dall'altra:

a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;

Tra queste query, un altro utente può modificare la tabella Cars e aggiornare Sold. Per evitare ciò, avvolgilo in una transazione:

BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;

Le transazioni sono supportate da InnoDB, ma non da MyISAM.