问题标签 [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.
sql - 我可以避免锁定行不必要的时间[在 Django 中]?
以下面的代码为例(忽略它的功能缺乏用处,因为它只是一个简单的例子来包含我需要的东西):
我与该示例有关的问题与查询何时访问数据库有关。显然,第一个查询将锁定该Person
行,然后我调用了一个缓慢的 API,这可能需要 3 秒才能响应,导致该行被锁定 3 秒。我是否正确理解这一点,并且在我的事务中发生缓慢的 API 命中的情况下,如果我移动查询的位置以便在所有缓慢的 API 请求之后SELECT FOR UPDATE
才发生,这是否会产生看似明显的效果一次不锁定我的行几秒钟(我的应用程序中的情况是不可避免的)?或者,我是否误解了,不知何故,直到事务结束,SQL 才真正命中数据库?select_for_update
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
如果这是可能的,您将如何防止这种情况发生?
mysql - 在 MySQL 中,为什么在使用未提交读取时从选择中设置变量会获得锁?
我们在 MySQL 中有一个使用 InnoDB 的表,并且我们使用未提交读的事务隔离级别。为什么@x
如图所示设置会获得锁?
尝试从另一个提示更新此表会导致超时错误:
spring - Spring和hibernate的事务管理,使用isolation_serializable
我正在使用 Spring 事务管理来控制具有休眠状态的应用程序,它使用两个线程实例来访问并发数据库并修改一个表。它确保值是守恒的。之前的表格是:
之后的表格:
主代码启动两个线程:
Servico 类是:
LivroQuantBoImpl 类具有以下方法:
我的 Spring .conf 是:
它正在执行此运行时异常:
怎么了?
database - 使用 pgadmin 运行两个并发会话
我需要对我的数据库运行两个并发会话(同时运行两组事务)。每个事务都有自己的开始和结束事务语句。
更改事务隔离级别后,我需要使用哪些语句来告诉我的数据库同时运行两个特定会话?我正在使用 pg-admin。
pg_sleep 函数会帮助我同时运行两组事务吗?
谢谢!
jdbc - 如何在同一个应用程序中使用不同的事务隔离级别?
是否可以在同一个应用程序中使用不同的事务隔离级别?例如,我想将 READ_COMMITTED 用于简单的客户端请求,将 READ_REPEATABLE 用于更复杂的请求。
database - oracle 中的隔离级别
我想知道关于提交的不同隔离级别,也想知道行级和表级锁。
sql - 如何正确管理 SQL Server 中的集合
假设房屋有居住者,并且任何房屋的两个居住者都不能具有相同的高度。
- 随机选择房子
- 获取房屋当前居住者的列表
- 通过检查列表来决定保留、替换、驱逐或添加哪些
- 确保新列表不包含任何相同高度的居住者。
- 用新列表替换现有列表;根据需要删除、插入或更新。
听起来很简单,但是当您有 50 个线程都试图同时执行此操作时,它会变得复杂。我在选择(步骤 2)上使用了 UPDLOCK、ROWLOCK 来阻止对我可能想要更新的任何居住者的可能更新。但是,当没有当前居住者并添加了新居住者时,我偶尔会失败。失败始终是唯一的约束违规。这绝不应该发生(参见步骤 4),但它确实发生了。
步骤 2-5 正在使用 ReadCommitted 隔离级别在 TransactionScope 内执行。
是否有一个最佳实践模型来定义应该如何处理这样的场景?
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 条件中的列不是主键,我不能设置锁定吗?