mysql悲观锁和乐观优缺点_乐观锁、悲观锁和MVCC各是什么?各自优缺点是什么?...

数据库并发控制通过悲观锁、乐观锁和多版本并发控制(MVCC)解决资源竞争导致的数据不一致。悲观锁在读取数据时加锁,适合写多读少的环境,保证数据安全但降低效率;乐观锁假设并发操作少有冲突,读时不加锁,更新时检查冲突,适用于读多写少场景,但可能导致多次重试;MVCC通过保存数据快照提高读性能,减少读写冲突,常与悲观锁结合使用。
摘要由CSDN通过智能技术生成

在数据库的实际使用过程中,我们常常会遇到不希望数据被同时写或者读的情景,例如秒杀场景下,两个请求同时读到系统还有库存1个,然后又先后把库存更新为0,这时候就会出现超卖的情况,这时候货物的实际库存和我们的记录就会对应不上了。

为了解决这种资源竞争导致的数据不一致等问题,我们需要有一种机制来进行保证数据的正确访问和修改,而在数据库中,这种机制就是数据库的并发控制。其中乐观并发控制,悲观并发控制和多版本并发控制是数据库并发控制主要采用的技术手段。

悲观并发控制

一、本质

维基百科:在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,PessimisticConcurrency Control,缩写“PCC”)是一种并发控制的方法。它可以阻止一个事务以影响其他用户的方式来修改数据。如果一个事务执行的操作读某行数据应用了锁,那只有当这个事务把锁释放,其他事务才能够执行与该锁冲突的操作。

事实上我们常说的悲观锁并不是一种实际的锁,而是一种并发控制的思想,悲观并发控制对于数据被修改持悲观的态度,认为数据被外界访问时,必然会产生冲突,所以在数据处理的过程中都采用加锁的方式来保证对资源的独占。

数据库的锁机制其实都是基于悲观并发控制的观点进行实现的,而且按照实际使用情况,数据库的锁又可以分为许多种类,具体可以见我后面的文章。

二、实现方式

数据库悲观锁的加锁流程大致如下:

开始事务后,按照操作类型给需要加锁的数据申请加某一类锁:例如共享行锁等

加锁成功则继续后面的操作,如果数据已经被加了其他的锁,而且和现在要加的锁冲突,则会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值