乐观锁与悲观锁

悲观锁的本质上是数据库自身所具备的一种机制,在数据库的事务里面有一个隔离性的概念,其主要的特征是当一个session操作某条数据的时候,其它的session是无法操作的,所以这就是一种锁的实现,而这种锁是数据库自身所带的功能。但是在之前都是针对于更新的操作使用的锁,于是如果希望在查询的时候也使用锁,那么就加上FOR UPDATE:

 SELECT * FROM 表名称 FOR UPDATE

表示使用悲观锁,在事务提交或回滚之前数据都不允许更新。

而乐观锁是不使用数据库锁的处理情况(并不推荐),需要在你真正使用的数据表里面追加一个字段,而这个字段用于做一个版本号,例如:正常情况下你的用户表可能只有mid、password,但是如果你使用的乐观锁则还需要追加有一个字段的列,这个列标识版本号:

create table member(
	mid varchar(50) primary key,
	name varchar(50),
	ver int default 0

);

现在假设有一条数据:

INSERT INTO member(mid.name,ver) VALUSE ('mldn','hello',0);

现在假设有两个session要进行该数据的读取,由于没有使用悲观锁,所以两个session都可以对该数据进行修改操作,于是第一个session修改了数据,修改之后将版本号做了一个“+1”,变为了1,而后另外一个 session更新的时候,发现版本号不对,则不允许更新。
乐观锁是基于算法的一种实现, 实际之中会非常的麻烦,在Hibernate设计框架里面有此概念,但是如果从我们开发角度来讲,建议这种操作交由 数据库自行处理,建议使用悲观锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值