当前位置: 首页 > 知识库问答 >
问题:

悲观锁在数据库中是如何工作的,隔离级别与它有什么关系吗?

秦焱
2023-03-14

我正在阅读数据库锁定(悲观、乐观)机制

会话1:
t1:打开事务:< br> t2:睡眠(3秒)< br> t5:更新用户集名称='x ',其中id =1

会话2:t2:更新用户集名称=“y”,其中id=1

我的疑问是: 1. t5会发生什么2.它必须与隔离级别做任何事情吗?如果是,不同隔离级别的行为会是什么。3.数据库(mysql,orOracle)只做悲观锁定吗?

共有1个答案

晋奕
2023-03-14

让我以相反的顺序回答你的问题,因为这样我不必重复某些部分。

Mysql 对乐观并发控制没有任何数据库级别的支持。这并不意味着其他rdbms也不支持OCC。您需要查看他们的手册。

隔离级别主要影响事务读取数据的方式,而不是事务如何更新数据。

  1. 问题中描述的场景的结果取决于哪个会话首先发出update以及该事务打开的时间。无论哪个会话首先执行更新,都将进行更改并对索引记录设置独占锁。在第一个事务完成之前,其他事务将无法执行更新。如果第一个事务运行了很长时间,那么另一个事务可能会在等待释放锁时超时
 类似资料:
  • 我正在编写一个Web应用程序,其中两个不同的用户可以更新一个事物列表,例如待办事项列表。我开始意识到,乐观锁定机制效果最好,因为我不期望高争用。 我正在查看事务隔离级别,现在我有点困惑。看起来不同的事务隔离级别也解决了类似的问题。 这两个不同的概念是如何相互关联的?如果可能,举一个简单的例子。

  • 我知道悲观锁定与锁定数据库记录,并在获得锁的“交易”结束时释放它。但这是否意味着悲观锁定是在物理交易中,例如 开始交易 提交事务? 对于一个网页,当用户选择要编辑的记录时,当他按下编辑按钮时,我想悲观地锁定此记录,以便其他人无法更改它,然后在编辑按钮onpress()事件中,我开始物理事务? 似乎是不可能的,因为编辑过程可能很长......它在整个编辑过程中保持数据库事务(按编辑按钮,在网页中编辑

  • JPA锁(乐观/悲观)和数据库隔离级别(以http://www . PostgreSQL . org/docs/9.1/static/transaction-iso . html为例)之间有没有相互影响? EJB3.2规范(8.3.2“隔离级别”)说Bean提供者负责设置事务的隔离级别,所以一般情况下我应该不会在意,但无论如何我还是很困惑。在PostgreSQL的示例中,根据提到的来源,默认隔离级

  • 我有点理解实体锁定和事务隔离级别的目的,但不能得到悲观锁定和可序列化级别之间的区别。据我所知,在这两种情况下,表都被锁定,其他事务都无法访问它,因此在这两种情况下,防止并发修改的操作都是由DB执行的,看起来没有什么区别。谁能解释一下这里是否真的有区别?

  • 我已经阅读了大约4个级别的隔离: 我想了解每个事务隔离在表上使用的锁 以下是事务隔离中可能出现的三种现象 脏读取-无锁定 不可重复读取-无脏读取作为对提交数据的锁定 幻影读取-锁定sql块(使用select query选择) 我想了解我们在哪里定义这些隔离级别:仅在jdbc/hibernate级别或在DB中定义 PS:我已经浏览了oracle中隔离级别的链接,但是它们看起来很笨拙,而且只针对数据库

  • 我有一个这样的实体 在我的场景中,可以同时更新帐户余额。因此,如果两个请求同时来更新同一帐户余额,其中一个请求成功,另一个请求获得乐观锁定。因此,我尝试用PESSIMSTIC_WRITE锁定模式更新帐户。但当并发请求到达时,乐观锁错误仍然存在。然后我从实体中删除了VERSION属性(乐观锁定),然后对于同一个帐户,所有并发请求都会成功。 现在我的问题是,是否可以同时使用两种锁定机制? 更新:对于P