Можете да използвате SELECT FOR UPDATE
. Вътре в транзакцията си започнете да избирате редовете, които искате да „заключите“, нещо като това:
SELECT * from TABLE where id = 123 FOR UPDATE;
Ако две различни транзакции се опитат да направят това едновременно, MySQL ще накара втората да изчака, докато първата извърши транзакцията. По този начин ще бъдете сигурни, че втората транзакция разглежда реда само след като първата приключи с него.