悲观锁与乐观锁

    xiaoxiao2026-03-19  5

    1.场景

    并发更新数据,若不加锁可能导致新数据被老数据覆盖。

    2.思想

    乐观锁,其实就是不加锁。它有乐观的态度,认为“我操作的数据没有被别人更新”。提交时万一发现已被修改就回滚。 悲观锁,悲观的态度,数据时时刻刻都会被更新,我就先将其先锁住,让别人用不了,我操作完成后再释放掉。

    3.实现

    乐观锁。为数据维护一个版本号(如在表中多加一列),当被更新时版本号自增。获取数据时同时拿到数据本身及当前版本号,若提交前数据被别人更新,那么在提交时服务端发现版本号过低就不提交。 悲观锁。需要数据库级别的的实现,程序中是做不到的,如果在长事务环境中,数据会一直被锁住,导致并发性能大大地降低。 写法一般是"select * from table where xxx for update",数据处理完毕后再update。
    最新回复(0)