이제 첫 번째 질의 구문 창에서 다음을 실행해 봅시다.
commit transaction 혹은 rollback
이제서야 두 번째 질의 구문 창에서 무한 대기 상태가 끝나고 결과가 나올 것입니다. 여기서 우리가 알 수 있는 것은 다음과 같습니다.
1. 트랜잭션을 걸고 액세스하는 레코드는 멀티스레드 프로그래밍에서 뮤텍스(1장 참고)를 잠금한 것과 비슷합니다.
2. 트랜잭션을 걸고 액세스하는 레코드는 다른 질의 구문 세션에서 액세스하면 앞서 트랜잭션이 완료되거나 취소될 때까지 블로킹이 걸립니다.
자, 뮤텍스가 나왔습니다. 우리는 1장에서 멀티스레드 프로그래밍에서 데드락과 관련된 주의 사항을 알아보았습니다. 그렇습니다. 데이터베이스 트랜잭션에서도 데드락을 주의해야 합니다.
또 다른 예로 레코드 A·B가 있습니다. 질의 구문 실행 세션, 즉 질의 구문 실행 프로세스가 2개 있습니다. 첫 번째 질의 구문 실행 프로세스에서 레코드 A → B 순서대로 레코드를 다룹니다. 두 번째 질의 구문 실행 프로세스에서는 레코드 B → A 순서로 레코드를 다룹니다. 첫 번째 질의 구문 실행 프로세스에서 레코드 A에 락을 걸고 레코드 B에 락을 겁니다. 두 번째 질의 구문 실행 프로세스에서는 레코드 B부터 락을 걸고 레코드 A에 락을 겁니다.