트랜잭션 T1과 T2가 아래와 같이 수행될 때, T1의 ㉠, ㉡의 출력… | [7급 국가직 데이터베이스론] 21년 1회차 기출문제 상세 페이지
1[7급 국가직 데이터베이스론] 21년 1회차
트랜잭션 T1과 T2가 아래와 같이 수행될 때, T1의 ㉠, ㉡의 출력 값은? (단, 팬텀(phantom)을 초래하는 위반들을 허용하지 않는다)㉠ ㉡
sale no name price 1 a1 200 2 a2 150 3 b1 100
T1 T2 set transaction isolation
level repeatable read;set transaction isolation
level repeatable read;start transaction; start transaction; insert into sale
values(4, ‘b2’, 50);select ㉠ sum(price)
from sale;commit update sale set price=price+100
where no=3;select ㉡ sum(price)
from sale;commit
1
450 550
2
450 600
3
500 600
4
500 500
해설
㉠은 450, ㉡은 550이다.
㉠ 시점에 T2의 삽입은 아직 commit되지 않았으므로 T1은 기존 세 행만 읽어 200+150+100=450을 얻는다.
T2가 commit한 뒤에도 팬텀을 허용하지 않으므로 T1에는 새 행(no=4)이 보이지 않는다. T1이 no=3의 price를 200으로 바꾸었으므로 ㉡은 200+150+200=550이다.
- ㉡이 600이 되려면 새 행의 50까지 합산되어야 하므로 팬텀 불허 조건에 어긋난다.
- ㉠이 500이 되려면 commit 전 삽입을 읽는 오손 읽기가 필요하므로 repeatable read에서 불가능하다.
오류나 개정된 내용이 보이면 알려주세요