暂无图片
sql 数据库悲观锁和乐观锁是什么?他们有什么用
我来答
分享
手机用户9893
2023-12-26
sql 数据库悲观锁和乐观锁是什么?他们有什么用

sql 数据库悲观锁和乐观锁是什么?他们有什么用

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
手机用户9893



悲观锁是一种持悲观态度的策略,即认为在并发环境下,数据的读取和修改总是会发生冲突,因此在整个数据处理过程中,需要将数据锁定[1]。例如,在商品秒杀过程中,库存数量的减少,避免出现超卖的情况,就可以使用悲观锁来实现[1]。

悲观锁的实现通常依靠数据库提供的锁机制,比如MySQL的排他锁,SELECT ... FOR UPDATE来实现悲观锁[1]。然而,由于悲观锁会导致大量的数据库阻塞,因此其效率较低[5]。


乐观锁则持乐观态度,即认为在并发环境下,虽然可能会发生冲突,但是通过合理的设计,可以有效地避免冲突。乐观锁的基本思想是,在读取数据时,并不立即锁定数据,而是在后续的修改操作中,通过比较数据的版本号或时间戳,来检查数据是否已经被其他事务修改,从而决定是否执行更新操作[3]。

乐观锁的优点在于,它不会造成数据库的阻塞,因此能够提高系统的并发性能。然而,由于乐观锁需要在后续的修改操作中进行额外的比较操作,因此可能会增加系统的复杂性,并且在极端情况下,可能会导致数据的不一致性[3]。


悲观锁和乐观锁的选择主要取决于具体的业务需求和系统特性。一般来说,如果系统的并发访问量较大,且数据的冲突频率较高,那么可以考虑使用悲观锁来保证数据的一致性;而如果系统的并发访问量较小,或者数据的冲突频率较低,那么可以考虑使用乐观锁来提高系统的并发性能[6]。

总的来说,悲观锁和乐观锁都是重要的并发控制手段,它们各有优缺点,需要根据具体的业务需求和系统特性来选择合适的策略。 

暂无图片 评论
暂无图片 有用 7
打赏 0
暂无图片
百里丶落云

 ## 悲观锁和乐观锁概述

**悲观锁**和**乐观锁**是用于处理并发资源的常用手段,它们并非数据库中具体的锁概念,而是我们定义出来的思想分类[3]。

### 悲观锁

悲观锁是一种持悲观态度的策略,即认为在并发环境下,数据的读取和修改总是会发生冲突,因此在整个数据处理过程中,需要将数据锁定[1]。例如,在商品秒杀过程中,库存数量的减少,避免出现超卖的情况,就可以使用悲观锁来实现[1]。

悲观锁的实现通常依靠数据库提供的锁机制,比如MySQL的排他锁,SELECT ... FOR UPDATE来实现悲观锁[1]。然而,由于悲观锁会导致大量的数据库阻塞,因此其效率较低[5]。

### 乐观锁

乐观锁则持乐观态度,即认为在并发环境下,虽然可能会发生冲突,但是通过合理的设计,可以有效地避免冲突。乐观锁的基本思想是,在读取数据时,并不立即锁定数据,而是在后续的修改操作中,通过比较数据的版本号或时间戳,来检查数据是否已经被其他事务修改,从而决定是否执行更新操作[3]。

乐观锁的优点在于,它不会造成数据库的阻塞,因此能够提高系统的并发性能。然而,由于乐观锁需要在后续的修改操作中进行额外的比较操作,因此可能会增加系统的复杂性,并且在极端情况下,可能会导致数据的不一致性[3]。

## 应用场景

悲观锁和乐观锁的选择主要取决于具体的业务需求和系统特性。一般来说,如果系统的并发访问量较大,且数据的冲突频率较高,那么可以考虑使用悲观锁来保证数据的一致性;而如果系统的并发访问量较小,或者数据的冲突频率较低,那么可以考虑使用乐观锁来提高系统的并发性能[6]。

总的来说,悲观锁和乐观锁都是重要的并发控制手段,它们各有优缺点,需要根据具体的业务需求和系统特性来选择合适的策略。 

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle的透明网关,如果连接sqlserver的话,是一个长连接吗?会导致日志无法收缩
回答 2
透明网关本身不会连接,只有当你发起会话的时候才有连接,如果这个会话一直开着不关闭的话,那就算所谓的“长连接”了
SQLServer中有几种事务隔离级别?
回答 2
已采纳
SQLServer共支持6种事务隔离级别,分别为:ReadUncommitted(未提交读)、ReadCommitted(提交读)、RepeatableRead(可重复读)、Serializable(
想问下 sqlserver 故障转移集群 操作系统时间不对可以直接修改吗
回答 3
已采纳
要看你这个库有没有用etl等工具,或者有没有对时间查询比较严格的sql,如果有,则最好先停库再修改。修改后不会造成数据损坏
win7-64位的系统能安装哪个版本的SQLserver?
回答 2
已采纳
2012与2014express与eveloper、Standard都可以在win7下装更详情的信息可查看这里https://docs.microsoft.com/zhCN/troubleshoot/
SQL server 这个死锁怎么看?
回答 2
DBCCTRACEON(1222,1) DBCCTRACEON(1204,1)开启死锁跟踪标记,如果出现死锁,在数据库日志里面会有体现。
SQL SERVER数据库本身可以修改时区吗?
回答 2
已采纳
数据库的时间都取操作系统,可以改操作系统的时区
sql server2022开发版能还原2008r2版本的数据文件吗?
回答 1
可以
sqlserver每秒事务数计算
回答 2
怎么用一条sql实现计算呢?
sqlserver 2008 镜像断开
回答 1
取消镜像重新配置也错误 
SQL SERVER alwayson ,可以从从库做CDC么?
回答 1
可以的,你可以看看这个来避坑https://blog.csdn.net/z10843087/article/details/77628684