【问题标题】:Serializable Isolation level and uncommitted inserts可序列化的隔离级别和未提交的插入
【发布时间】:2012-12-29 23:06:18
【问题描述】:

假设我有两笔交易

T1 - 以 READ_COMMITTED 隔离级别写入表的繁重数据处理作业,例如 Table1。 T2 - 使用 SERIALIZABLE 隔离级别从 Table1 读取数据的事务。

Table1 架构

autoincrement_id(INT) 数据(varchar)

T1 (READ_COMMITTED)

插入表 1.. 插入表 1.. 插入表 1.. 插入表 1..

T2(可序列化)

SELECT * FROM Table1 WHERE autoincrement_id > x; --做点什么

如果 T2 在 T1 之前开始,它实际上会停止 T1(正确吗?)

但是如果 T1 在 T2 之前开始并且在 T2 期间仍在进行中,那么 T2 是否会读取 T1 插入但未提交的数据?

【问题讨论】:

    标签: sql sql-server-2008 concurrency transactions isolation-level


    【解决方案1】:

    如果 T2 在 T1 之前开始,它实际上会停止 T1(正确吗?)

    是的,正确!

    但是如果 T1 在 T2 之前开始并且在 T2 期间仍在进行中,那么 T2 会 读取 T1 插入但未提交的数据?

    不,T1 会在那时实际上停止 T2。所以 T2 等待 T1 提交或回滚(至少在理论上......)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-16
      • 2021-06-21
      • 1970-01-01
      • 2015-03-24
      • 2021-01-14
      • 2012-11-02
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多