乐观锁、悲观锁、共享锁和排它锁的简单理解

个人简单理解

乐观锁(乐观并发控制)和悲观锁(悲观并发控制)是指数据库在对待并发上控制的两种思想,共享锁和悲观锁是具体的锁的实现,且都属于悲观锁。乐观锁没有加锁


1.共享锁(S)(读锁):一旦事务给数据或记录加上了共享锁(S),则只能读数据不能写数据,其他事务也只能加共享锁(S)知道上一个事务释放了锁

2.排它锁(X)(写锁):一旦被上上排它锁(X),该事务可进行读写操作,其他事务只能等到该事务释放了锁后才能获取锁


这两种锁都是在进行数据操作是先获取锁,因此都是悲观锁的范畴


乐观锁:获取数据的时候不用获取锁,直到需要更新数据的时候才去检查获取的记录是否已被其他事务更新,如果更新了则返回错误抛异常。注意的是,乐观锁中没有锁机制,通常的实现方式是用版本号或时间戳实现,比如,事务get了一条记录,同时获取到了该条记录的version,如果需要做更新操作,则对version进行+1操作,插入数据库时就会检查数据库当前的version+1是否与插入的version一致,如果一致则插入,否则抛异常,另只有更新操作才对version做+1操作,get不会做


悲观锁:获取数据之前先获取锁,再进行操作


具体的专业术语或名词解释可自行搜索,这里只是我个人比较通俗的解释。


参考文章:http://www.cnblogs.com/hadoop-dev/p/7065702.html

乐观锁悲观锁是并发控制中常用的两种策略。 乐观锁的实现方式是,当多个事务同时访问同一数据时,假设每个事务都能成功地完成操作,直到提交时才会检查是否有冲突。如果检测到冲突(比如数据已被其他事务修改),则会回滚当前事务并重新尝试。 乐观锁的实现通常通过为每一条记录添加版本号或时间戳来实现。当事务读取数据时,会记录下当前版本号或时间戳。在提交时,会检查数据库中的当前版本号或时间戳与事务开始时记录的版本号或时间戳是否一致,如果不一致则说明数据已被其他事务修改过,需要回滚当前事务并重新尝试。 悲观锁的实现方式是,在事务执行期间,对数据进行加锁以阻止其他事务对其进行修改。悲观锁认为在事务执行期间会发生冲突,因此提前对数据进行加锁以避免冲突。 悲观锁的实现通常通过数据库的锁机制来实现,比如对某条记录加上排它锁(Exclusive Lock)或共享锁(Shared Lock)。排它锁会阻止其他事务对该记录进行读取修改,而共享锁只会阻止其他事务对该记录进行修改,但允许读取。 需要注意的是,乐观锁悲观锁各有优缺点,适用于不同的并发场景。乐观锁适用于读多写少的场景,并发性能较好;而悲观锁适用于写多读少的场景,保证数据的一致性安全性。在实际应用中,根据具体情况选择合适的并发控制策略是很重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值