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

Blocco di una riga in una tabella MySQL durante una transazione

utilizzando un select ... for update la query all'interno della transazione dovrebbe darti la semantica che desideri:gli altri aggiornamenti verranno bloccati e le altre sessioni che tentano di eseguire lo stesso blocco verranno bloccate finché non esegui il commit:

START TRANSACTION
SELECT * FROM piggybank WHERE id IN (1, 2) FOR UPDATE;
SELECT amount FROM piggybank WHERE id = 2;
UPDATE piggybank SET amount = amount + 5 WHERE id = 1;
COMMIT