1

想象一下我有两笔交易

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

表 1 架构

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 插入但未提交的数据?

4

1 回答 1

2

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

是,对的!

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

不,T1 会真正停止 T2。所以 T2 等待 T1 要么被提交要么被回滚(至少在理论上......)。

于 2013-01-16T08:50:57.857 回答