Mysql
 sql >> Base de données >  >> RDS >> Mysql

Verrouiller une ligne dans une table MYSQL lors d'une transaction

en utilisant un select ... for update la requête à l'intérieur de la transaction devrait vous donner la sémantique que vous souhaitez - les autres mises à jour seront verrouillées et les autres sessions tentant de prendre ce même verrou seront bloquées jusqu'à ce que vous vous engagiez :

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