我有以下两项事务:
T1:
Begin Transaction;
S1: Insert Into Salary Values (103, 60000);
S2: Update Salary Set salary = salary + 10000 Where id = 101;
Commit;T2:
Begin Transaction;
S3: Select Avg(salary) As a1 From Salary;
S4: Select Avg(salary) As a2 From Salary; 假设单个语句S1、S2、S3和S4总是以原子方式执行。假设最初工资中有两个元组:(101,30000)和(102,50000)。每个事务运行一次并提交。事务T1总是以隔离级别Serializable (最高级别)执行。
a) (如果事务T2以可序列化的隔离级别执行,T2返回哪些可能的valuesa1和a2对?
b) (如果事务T2执行隔离级别读提交,那么T2返回哪些可能的值( a1和a2 )?
c) (如果事务T2以隔离级别执行读未提交),T2返回哪些可能的值对a1和a2?
以下是我的答案:
a) S1 - S2 - S3 - S4值: a1: 50000,a2: 50000
S3 - S4 - S1 - S2值: a1: 40000,a2: 40000
但我有点搞不懂是怎么读的,怎么写的。任何对B和C的帮助,都会是很大的帮助。
发布于 2014-03-31 09:34:28
给定一个长事务,在发出“提交”命令之前,除非执行“未提交”,否则无法查看所有的插入/更新/删除。在遮罩下,您插入/更新的数据被锁定,以便正常查看。有时,甚至整个表都被锁定--除非您执行未提交的读操作,否则根本无法查看任何记录。
对于快速操作(例如不到1秒),您不会真正感觉到两者之间的区别,但是要测试两者之间的差异,您应该为T2打开一个不同的连接,并在没有“提交”命令的情况下运行T1,然后您将感觉到读提交的“锁”。
https://stackoverflow.com/questions/22747989
复制相似问题