Możesz użyć SELECT FOR UPDATE
. Wewnątrz transakcji zacznij wybierać wiersze, które chcesz „zablokować”, mniej więcej tak:
SELECT * from TABLE where id = 123 FOR UPDATE;
Jeśli dwie różne transakcje spróbują to zrobić w tym samym czasie, MySQL sprawi, że druga zaczeka, aż pierwsza zatwierdzi transakcję. W ten sposób będziesz mieć pewność, że druga transakcja sprawdza wiersz dopiero po zakończeniu pierwszej.