一、定义
先上个定义看一下吧
百度百科:
乐观锁机制采取了更加宽松的加锁机制。乐观锁是相对悲观锁而言,也是为了避免数据库幻读、业务处理时间过长等原因引起数据处理错误的一种机制,但乐观锁不会刻意使用数据库本身的锁机制,而是依据数据本身来保证数据的正确性。
相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。一般的实现乐观锁的方式就是记录数据版本。
二、使用
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.小结
乐观锁并未真正加锁,效率高。一旦锁的粒度掌握不好,更新失败的概率就会比较高,容易发生业务失败。
举例
在商城项目中,订单支付、售后、结算、提现等加上乐观锁,确保数据的准确性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。