悲观锁与乐观锁

悲观锁和乐观锁都是为了防止同时修改数据导致的一系列问题,但是悲观锁是依赖于数据库的锁机制,对每次请求上锁,可能导致并发性降低的问题。而乐观锁利用一些技巧实现了锁的效果,并迅速失败,避免了上锁时间过长带来的并发问题。

 悲观锁

select column ... from table tablename where [condition] for update;

该sql语句对查询的结果上锁,其他语句如果访问查询结果则会一直阻塞直到超时。

上锁如果通过索引查询则是行锁,否则为表锁。

乐观锁

通过一些附加数据来实现上锁。
比如增加一个version字段
实现过程:
写数据前先获取数据和version并保存,
然后update数据 update tablename set datacolumn = value, version=version+1 where id=1,version=#{version}
因为一次修改数据的时候加入了version条件,并且同时修改version,所以该操作只能被执行一次,执行一次后version改变,则无法给另一个语句执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值