一、定义

先上个定义看一下吧
百度百科:
乐观锁机制采取了更加宽松的加锁机制。乐观锁是相对悲观锁而言,也是为了避免数据库幻读、业务处理时间过长等原因引起数据处理错误的一种机制,但乐观锁不会刻意使用数据库本身的锁机制,而是依据数据本身来保证数据的正确性。

相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。一般的实现乐观锁的方式就是记录数据版本。

二、使用

1.一个常用的表,User

name varchar 20
id int 11
age int 3

平时我们做修改的时候,一般先查询一下,这个用户是否存在,然后在进行修改.但是如果2次或以上修改操作同时进行时,数据就会不对。

2.简单例子

select * from User where id=1  //第一次

select * from User where id=1  //第二次

//第一次修改
update User set age=1 where id=1

//修改完毕后,数据库数据发生了变化。但是当第二次修改的时候,数据就与展示的内容不一致.所以这时候要使用乐观锁

//使用乐观锁
1.在User表加一个字段  version 版本 int类型,每次更新的时候 version+1

//事例
select * from User where id=1
update User set age=1,version=version+1 where id=1 and version=#{version}

//这时候如果2次以上进行修改操作的时候,第一次修改成功,第二次则修改失败,则保证了数据的正确性

3.小结

乐观锁并未真正加锁,效率高。一旦锁的粒度掌握不好,更新失败的概率就会比较高,容易发生业务失败。

举例

在商城项目中,订单支付、售后、结算、提现等加上乐观锁,确保数据的准确性。


Zero丶轩
1 声望0 粉丝

每天记录一点点,菜鸟也能成大佬