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

Spring数据库锁:需要帮助了解数据库死锁的条件

公西国发
2023-03-14

我使用Spring-Data-Jpa并使用@Lock注释(悲观_写)来获取数据库(Oracle)锁。我需要帮助来了解以下场景是否会导致数据库死锁。

  1. 事务1(PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT)将数据库锁定在say教师表上(说锁定在id=1的行上)。它试图在子表中插入一条新记录,比如会议。教师表没有更新
  2. 当事务1正在进行时。事务2(PROPAGATION_REQUIRED,ISOLATION_DEFAULT)尝试更新教师表(id=1的行)。它不需要数据库锁。
  3. 因为锁接管了id为1的行。事务2必须等待事务1结束。

这种情况会导致数据库死锁吗?

共有1个答案

戈巴英
2023-03-14

我认为您的情况将导致数据库锁,是的,但不会触发死锁。而数据库锁是我们期望发生的事情,以实现ACID事务。

 类似资料:
  • 问题内容: 某些数据库功能(例如和)很容易受到死锁的影响,因为数据库未指定将使用哪种锁定顺序。我发现有两次 讨论暗示此行为不是SQL标准指定的,更不用说具体的实现了。因此,我在假设我们无法控制锁定顺序的情况下进行操作(至少,这样做并不明显)。 如果我们不能依赖锁定顺序,应该如何避免数据库死锁? 如果我们不应该避免僵局(您将不得不非常努力地说服我),那么我们应该怎么做? 这个问题与数据库无关,所以请

  • 本文向大家介绍InnoDB数据库死锁问题处理,包括了InnoDB数据库死锁问题处理的使用技巧和注意事项,需要的朋友参考一下 场景描述 在update表的时候出现DeadlockLoserDataAccessException异常 (Deadlock found when trying to get lock; try restarting transaction...)。 问题分析 这个异常并不会

  • 我有片段,我在每个片段中缓存数据。我将数据缓存在AsyncTask中,方法是从服务器上以doInBackground方法下载数据,并将其保存在onPostExecute中到我的数据库中。因此,我总是在onPostExecution中打开数据库连接。如果我滚动“fast”并抛出片段,我认为AsyncTasks会传递预览实例,并且在我打开连接的行中会出现一个<code>android.database

  • 问题内容: 我通过“ SHOW INNODB STATUS”收到了以下死锁日志。有人可以解释一下为什么交易被中止吗?似乎事务2持有该锁,但也卡住以请求相同的锁(“等待”部分除外),当事务1也需要它时,这将导致死锁。 问题答案: 第一步是确定两个查询是什么: SELECT API_KEY,完成,创建,删除,标记,,GROUP_ID,主机名,,JID,标签,语言,优先,,重新启动,状态,类型,UID,

  • 本文向大家介绍Mybatis update数据库死锁之获取数据库连接池等待,包括了Mybatis update数据库死锁之获取数据库连接池等待的使用技巧和注意事项,需要的朋友参考一下  最近学习测试mybatis,单个增删改查都没问题,最后使用mvn test的时候发现了几个问题: 1.update失败,原因是数据库死锁 2.select等待,原因是connection连接池被用光了,需要等待 g

  • 问题内容: 我在我的应用程序中做了一些重复的操作(测试),突然我收到一个奇怪的错误: 我已经重新启动服务器,但是错误仍然存​​在。可能是什么呢? 问题答案: 从Django文档中: SQLite是一个轻量级的数据库,因此不支持高级别的并发性。OperationalError:数据库已锁定错误,表明你的应用程序并发性超过sqlite在默认配置下无法处理的并发性。此错误意味着一个线程或进程在数据库连接