请教一道数据库习题

来源:百度知道 编辑:UC知道 时间:2024/07/07 15:11:42
现已知一个表格Xbox_Games(name,price),并且也知道数据库里有如下记录
('ok_game',40);
('good_game',50);
('awesome_game',60);

有如下两个transcations:

T1: BEGIN TRANSACTION
S1: UPDATE Xbox_Games SET price=22 WHERE name='ok_game'
S2: INSERT INTO Xbox_Games VALUES ('BAD_Game', 0)
S3: UPDATE Xbox_Games SET price=38 WHERE name='ok_game'
COMMIT;

T2: BEGIN TRANSACTION
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
S4: SELECT AVG(price) AS average_price FROM Xbox_Games
COMMIT;

假设这两个transcation同时在DBMS里发生,那么average_price 的可能值是:

1.50
2.44
3.37

选项:
A.只有1
B.只有2
C.只有1和2
D.只有1和3

请在ABCD中选出正确选项并说出简要思路。

谢谢

D,
SERIALIZABLE等同于holdlock
指定该选项后,
1当前事务语句不能读取已由其他事务修改但尚未提交的数据;
2任何其他事务都不能在当前事务完成之前修改由当前事务读取的数据。

所以如果T2的结果取决于T1的完成情况,
1已经COMMIT,则结果为37
2未COMMIT,则结果为50

SET TRANSACTION 的一个作用是确保事务级一致或语句级一致中有一个实施

在执行select之前会等待事务执行完毕,答案应该是 37