【问题标题】:What is isolation level, when 2 concurrent transaction trying to change it什么是隔离级别,当 2 个并发事务试图更改它时
【发布时间】:2019-02-05 14:47:19
【问题描述】:

我有两个事务在同一张表上工作。

BEGIN TRAN
SET TRAN ISOLATION LEVEL SERIALIZABLE
--something more

第二个

BEGIN TRAN
SET TRAN ISOLATION LEVEL REPEATABLE READ
--something more

他们会在这个级别上一起工作,还是会在自己的级别上工作?如果此隔离级别之一是快照会发生什么?

【问题讨论】:

  • 这些事务是“嵌套”的,都是在单个连接上启动的,还是在单独的连接上启动的?
  • 它们被不同的数据库连接调用。但正在同时工作
  • 当前事务隔离级别是会话的一部分。如果这些命令同时执行,则根据定义它们在不同的会话中,所以不,它们不是在级别上一起工作的。事务隔离级别规定了何时使用哪种锁,当然,会话确实尊重彼此的锁(或快照)。弄清楚在不同隔离级别下执行命令时会发生什么可能会变得很复杂。

标签: sql sql-server database transactions isolation-level


【解决方案1】:

SET TRANSACTION ISOLATION LEVEL 影响它被调用的连接

它指定这个连接将容忍什么,这个连接将使用什么锁定策略,等等。如果另一个连接使用不同的隔离级别,两个级别同时“有效”,对于他们各自的联系。要了解它们如何交互,您需要从每个连接的角度单独考虑它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2015-03-15
    • 2015-03-26
    • 2011-09-30
    相关资源
    最近更新 更多