问题标签 [isolation-level]

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 回答
62 浏览

sql-server - 在隔离问题中更新聚合列

我有一个交易和交易表,其中交易表有一个聚合列“TotalSales”,它只是每个交易的交易计数。

使用以下命令,交易行数和总销售数是否有可能不同步(不包括删除行)?默认隔离级别是否适用于此?我们有很多用户可能同时进行购买,所以我试图找出处理这个问题的最佳方法。

0 投票
1 回答
539 浏览

c# - 来自代码的 Sql 客户端事务与数据库控制的事务

我一直在存储过程中完成事务,但现在我需要将一堆从代码中执行的“动态”语句包装sp_executesql在事务中。

具体来说READ UNCOMMITED,在某些情况下,我需要这些隔离级别(我知道那是做什么的,是的,这就是我需要的)。这是SQL2008。

我的问题是:如果我使用BeginTransaction()隔离级别设置为的 SqlConnection 实例的方法,是否IsolationLevel.ReadUncommitted会产生与执行具有该READ UNCOMMITED语句的存储过程相同的效果?

0 投票
8 回答
1793 浏览

oracle - Oracle 事务隔离

我有一个方法 SaveApp() 将停用现有记录并插入一个新记录。

假设在数据库表 SalesApp 中,我有 2 条 appID 等于 123 的记录;

  1. 记录 1,appID 123,非活动
  2. 记录 2,appID 123,活动

如果我SaveApp()同时在两个线程中调用此方法,则第一个事务(我们称之为T1)将更新现有的两条记录,而第二个事务(我们称之为T2)等待。

T1结束后,现在这张表中会有 3 条记录。然而,不知何故,T2不知道新插入的记录,T2中的更新查询只更新前两条记录,并插入第四条。

在这两个方法调用之后,在数据库中,我们现在将有 4 条记录,第 3 条和第 4 条都处于活动状态,这是错误的。

  1. 记录 1,appID 123,非活动
  2. 记录 2,appID 123,不活动
  3. 记录 3,appID 123,活动
  4. 记录 4,appID 123,活动

你知道任何解决方案可以解决这个问题吗?我尝试使用隔离级别可序列化,但它不起作用。

谢谢!

0 投票
2 回答
12533 浏览

python - 如何在 SQLAlchemy for PostgreSQL 中设置事务隔离级别?

我们正在使用 SQLAlchemy 声明性基础,我有一个方法要隔离事务级别。解释一下,有两个进程同时写入数据库,我必须让它们在事务中执行它们的逻辑。默认事务隔离级别是 READ COMMITTED,但我需要能够使用 SERIALIZABLE 隔离级别执行一段代码。

这是如何使用 SQLAlchemy 完成的?现在,我的模型中基本上有一个方法,它继承自 SQLAlchemy 的声明性基础,基本上需要以事务方式调用。

我这样做是为了使用事务隔离级别来调用它,但它没有达到我的预期。从我在 postgres 日志中看到的内容来看,隔离级别仍然是 READ COMMITTED。有人可以帮助确定我做错了什么吗?

我正在使用 SQLAlchemy 0.5.5

0 投票
1 回答
2884 浏览

mysql - 事务隔离级别很好的解释

有人知道一本好书,其中用大量示例和建议解释了事务隔离级别,在什么情况下使用什么隔离级别?

0 投票
1 回答
957 浏览

c# - TransactionScope 需要多个隔离级别?

我在我的应用程序中遇到了需要使用表锁定提示或将事务隔离级别设置为默认读取已提交以外的其他情况,以解决死锁问题。我正在使用面向服务的架构,每个服务调用都作为原子操作运行,Linq To Sql 用作轻量级 DAL。每个服务调用都会调用我的业务层并声明一个新事务,如下所示:

问题是有时我有复杂的业务逻辑,需要许多数据库操作。一些读取、一些写入、一些用于更新的读取等,都在同一个服务调用中,因此是同一个事务。

我已阅读有关 Linq To Sql 无法向您的 linq 查询添加表锁定提示的信息,建议使用 TransactionScope 隔离级别的解决方案。这很好,但在我的情况下,每个事务都是为了原子服务调用的目的,我看不出这会在哪里起作用。例如,如果我需要在没有锁定的情况下读取一个表,并且脏读可能没问题,然后转身再做一次读取以进行更新,然后进行更新。我不想为整个事务设置未提交的读取,只设置一个特定的读取,那我该怎么办?

有没有我可以实现的扩展,允许我添加表锁定提示,而不使用视图或存储过程,或者使用 datacontext.ExecuteQuery("my raw sql string here")

0 投票
1 回答
10439 浏览

oracle - 如何查看任意 oracle 会话使用的事务隔离级别

我试图找出特定会话(不是我自己的)在 oracle 服务器上的隔离级别。是否有 av$.. 视图来获得这个?

0 投票
1 回答
45845 浏览

sql - SELECT 语句 - 带有 SET TRANSACTION ISOLATION LEVEL READ COMMITTED 的 NOLOCK

我的理解是,当在 SELECT 语句中使用 NOLOCK 时,它也可以读取未提交/脏行。但我想利用表上的 NOLOCK 提示,以便我的 SELECT 查询运行得更快。

现在,表上的 NOLOCK 但与“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”一起是否给我 NOLOCK 优势和更快的 SELECT 查询(因为 NOLOCK)只有提交的行(因为 SET)?

0 投票
1 回答
775 浏览

jta - 在 Berkeley DB Java 版中为分布式事务 (XA) 设置事务隔离级别

我在 BDB JE 应用程序中使用分布式事务来协调多个 BDB JE 环境中的事务。我想将事务隔离级别设置为可序列化。为了开始分布式事务,我使用我生成的 Xid,并且必须确保它是全局唯一的,避开 BDB JE 的本地 Transaction 类。启动的事务分支是 ThreadLocal,因此在操作中将 null 传递到事务字段中。那么如何设置隔离级别呢?隔离级别是否已经默认为可序列化?我的 Google-fu 没有出现任何问题...

0 投票
2 回答
4001 浏览

sql-server - 了解 SQL Server 中的锁定行为

我试图重现问题[1]的情况。


在桌子上,我在 SQL Server 2008 R2 SSMS 中获取并填充了来自 wiki 的“隔离(数据库系统)”[2] 的数据,我执行了:

1)首先在 SSMS 的第一个选项卡(窗口)中

2) 紧随其后,在第二个窗口中


更新:
对不起,结果已更正。

根据 2) 中设置的隔离级别,我的结果是 SELECT 返回:

  • 立即(读取未提交的插入行)

    • 对于所有带有 NOLOCK 的 SELECT 情况
    • for READ UNCOMMITTED (SELECT 带或不带 NOLOCK)
  • 正在等待事务 1) 的完成(当SELECT 没有 NOLOCK 时)和

    • 在 READ COMMITTED 和更高(REPEATABLE READ, SERIALIZABLE)事务隔离级别

这些结果与问题中描述的情况相矛盾(并在答案中解释?)[1]
(例如,带有 NOCHECK 的 SELECT 正在等待 1 的完成)等。

如何解释我的结果和 [1]?


更新 2:
这个问题实际上是我的问题 [3] 的子问题(或未回答的结果)。

引用:
[1]
解释 SQL Server 中的
锁定行为 解释 SQL Server 中的锁定行为
[2]
“隔离(数据库系统)”
请添加尾随)链接。我无法设法将它保存在链接中! http://en.wikipedia.org/wiki/Isolation_(database_systems)
[3]
NOLOCK 是 SQL Server 2005 中 SELECT 语句的默认值吗?
NOLOCK 是 SQL Server 2005 中 SELECT 语句的默认值吗?