最初A = 1000,B = 2000的值。当T2的第一条指令执行时,读(A)会读取950或1000吗? (因为写(A)之前没有执行)
T1 T2
------- --------
read(A)
A:=A-50
read(A)
temp: A * 0.1
A: A-temp
write (A)
read(B)
write(A)
read(B)
B:= B+ 50
write(B)
B:=B +temp
write(B)
答案 0 :(得分:0)
在最一般的情况下,它取决于您设置的事务隔离级别,以及dbms如何实现这些隔离级别。
例如,SQL标准规定,如果将事务隔离级别设置为"读取未提交的",则可以进行脏读,不可重复读和幻像读。但是在PostgreSQL中,将隔离级别设置为"读取未提交的"实际上为你提供了" read committed"的行为。 (SQL标准允许这样;"读取已提交"是一个比#34更强的隔离级别;读取未提交的#34;。
T2的第一条指令应为1000,因为
您可以通过打开两个会话在数据库开发环境中测试此类事物。我自己用两个终端窗口。
您可以从学习在事务,隔离级别,提交和回滚方面考虑数据库而不是在读取和写入方面受益。