sử dụng select ... for update
truy vấn bên trong giao dịch sẽ cung cấp cho bạn ngữ nghĩa bạn muốn - các bản cập nhật khác sẽ bị khóa và các phiên khác cố gắng thực hiện cùng một khóa này sẽ bị chặn cho đến khi bạn cam kết:
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