乐观并发控制

optimistic_concurrency_control2026-10-16 18:04:00

乐观并发控制在写入或提交时检查读取后是否发生冲突,适合希望避免长时间预先持锁的工作流程。

版本检查

可以给记录保存 version,更新时同时带上原版本条件,并原子增加版本:

UPDATE inventory
SET quantity = quantity - 1, version = version + 1
WHERE id = :id AND version = :old_version AND quantity > 0;

这是说明原理的参数化 SQL,具体占位符取决于驱动。应用必须检查影响行数;零行可能表示版本变化、库存不足或记录不存在,应按业务区分,不能当作成功。

冲突处理

冲突后可以重新读取并重算、向用户提示或有限重试。不能无条件用旧数据覆盖,也不能无限重试。乐观控制仍依赖数据库原子写入,不等于完全没有底层锁。

参考资料

本页目录