问题标签 [transaction-isolation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
293 浏览

sql - 我可以避免锁定行不必要的时间[在 Django 中]?

以下面的代码为例(忽略它的功能缺乏用处,因为它只是一个简单的例子来包含我需要的东西):

我与该示例有关的问题与查询何时访问数据库有关。显然,第一个查询将锁定该Person行,然后我调用了一个缓慢的 API,这可能需要 3 秒才能响应,导致该行被锁定 3 秒。我是否正确理解这一点,并且在我的事务中发生缓慢的 API 命中的情况下,如果我移动查询的位置以便在所有缓慢的 API 请求之后SELECT FOR UPDATE才发生,这是否会产生看似明显的效果一次不锁定我的行几秒钟(我的应用程序中的情况是不可避免的)?或者,我是否误解了,不知何故,直到事务结束,SQL 才真正命中数据库?select_for_update

0 投票
1 回答
2214 浏览

java - 使用@Transactional 确保线程安全

我有一个关于 @Transactional 注释如何单独管理代码和事务执行的问题。给定正确设置的 Spring 应用程序和以下代码:

是否有可能出现以下情况:

  • 资金 == 100;金额 == 100
  • 线程 A 进入提现/事务 A 开始
  • 线程 A 执行 isEnoughFunds 评估结果为 true
  • 线程 B 进入提现/事务 B 开始
  • 线程 B 执行 isEnoughFunds 评估结果为 true
  • 线程 A 执行 reductionFunds / 线程 A 锁定 db 记录
  • 线程 B 等待线程 A 提交事务并释放写锁
  • 线程 A 退出退出 / 事务 A 提交
  • 线程 B 执行 reductionFunds / 线程 B 锁定 db 记录
  • 线程 B 退出退出 / 事务 B 提交
  • 资金 == -100

如果这是可能的,您将如何防止这种情况发生?

0 投票
2 回答
1260 浏览

mysql - 在 MySQL 中,为什么在使用未提交读取时从选择中设置变量会获得锁?

我们在 MySQL 中有一个使用 InnoDB 的表,并且我们使用未提交读的事务隔离级别。为什么@x如图所示设置会获得锁?

尝试从另一个提示更新此表会导致超时错误:

0 投票
1 回答
3389 浏览

spring - Spring和hibernate的事务管理,使用isolation_serializable

我正在使用 Spring 事务管理来控制具有休眠状态的应用程序,它使用两个线程实例来访问并发数据库并修改一个表。它确保值是守恒的。之前的表格是:

之后的表格:

主代码启动两个线程:

Servico 类是:

LivroQuantBoImpl 类具有以下方法:

我的 Spring .conf 是:

它正在执行此运行时异常:

怎么了?

0 投票
0 回答
209 浏览

database - 使用 pgadmin 运行两个并发会话

我需要对我的数据库运行两个并发会话(同时运行两组事务)。每个事务都有自己的开始和结束事务语句。

更改事务隔离级别后,我需要使用哪些语句来告诉我的数据库同时运行两个特定会话?我正在使用 pg-admin。

pg_sleep 函数会帮助我同时运行两组事务吗?

谢谢!

0 投票
1 回答
382 浏览

jdbc - 如何在同一个应用程序中使用不同的事务隔离级别?

是否可以在同一个应用程序中使用不同的事务隔离级别?例如,我想将 READ_COMMITTED 用于简单的客户端请求,将 READ_REPEATABLE 用于更复杂的请求。

0 投票
2 回答
23318 浏览

database - oracle 中的隔离级别

我想知道关于提交的不同隔离级别,也想知道行级和表级锁。

0 投票
2 回答
152 浏览

sql - 如何正确管理 SQL Server 中的集合

假设房屋有居住者,并且任何房屋的两个居住者都不能具有相同的高度。

  1. 随机选择房子
  2. 获取房屋当前居住者的列表
  3. 通过检查列表来决定保留、替换、驱逐或添加哪些
  4. 确保新列表不包含任何相同高度的居住者。
  5. 用新列表替换现有列表;根据需要删除、插入或更新。

听起来很简单,但是当您有 50 个线程都试图同时执行此操作时,它会变得复杂。我在选择(步骤 2)上使用了 UPDLOCK、ROWLOCK 来阻止对我可能想要更新的任何居住者的可能更新。但是,当没有当前居住者并添加了新居住者时,我偶尔会失败。失败始终是唯一的约束违规。这绝不应该发生(参见步骤 4),但它确实发生了。

步骤 2-5 正在使用 ReadCommitted 隔离级别在 TransactionScope 内执行。

是否有一个最佳实践模型来定义应该如何处理这样的场景?

0 投票
1 回答
125 浏览

database - MVCC模型中的数据库事务隔离

我在这里阅读了有关 MVCC 模型中的事务隔离的信息,并且出现了 2 个问题。

  • MVCC 是否使用锁?据我了解——不,如果是这样——
  • 这个表是什么意思?
0 投票
1 回答
1805 浏览

sql - 可序列化事务隔离锁

我已经为一个事务设置了一个可序列化的事务隔离锁。但是我观察到了一些意想不到的结果。

我的查询是

这里 col1 是主键。这里 col1 值为 10,11,12....19,20 的行被锁定以进行更新/插入。在 where 条件下,我给出了 col1>10 和 col1<20 的条件,但 col1=10 和 col1=20 的行仍然被锁定。

如果我给

然后 col2 的值从 9 到 21 的行被锁定。那么为什么 col1 的 9 和 21 被锁定在这里?

对于下面的查询,全表被锁定。这里 col3 是一个非主列。如果 where 条件中的列不是主键,我不能设置锁定吗?