两人同时读到 version=1,各自算完写回,后写的覆盖先写的,就是丢失更新。做法是写入时带版本条件。
语句里同时 set version = version + 1 和 where version = 读到的值,影响行数 0 说明被别人改过,重读再试。
重试要有上限,别写成死循环。
UPDATE account
SET balance = ?, version = version + 1
WHERE id = ? AND version = ?;
-- 影响行数为 0 表示写入失败,重读后重试
THE END






暂无评论内容