1.场景
并发更新数据,若不加锁可能导致新数据被老数据覆盖。
2.思想
乐观锁,其实就是不加锁。它有乐观的态度,认为“我操作的数据没有被别人更新”。提交时万一发现已被修改就回滚。
悲观锁,悲观的态度,数据时时刻刻都会被更新,我就先将其先锁住,让别人用不了,我操作完成后再释放掉。
3.实现
乐观锁。为数据维护一个版本号(如在表中多加一列),当被更新时版本号自增。获取数据时同时拿到数据本身及当前版本号,若提交前数据被别人更新,那么在提交时服务端发现版本号过低就不提交。
悲观锁。需要数据库级别的的实现,程序中是做不到的,如果在长事务环境中,数据会一直被锁住,导致并发性能大大地降低。
写法一般是"select * from table where xxx for update",数据处理完毕后再update。
时间: 2024-10-02 23:41:00