안녕하세요. 초급개발자입니다!
다름이 아니고 구체적인 db lock 발생상황에 대해 의문이 생겨 검색의 검색의 검색을 해봤으나 명확하게 이해되지 않아서 직관적으로 질문 좀 드려도 될까 하고 글 남깁니다..
대표적인 락의 종류가
1)S_LOCK 공유잠금 (SELECT)
2)X_LOCK 베타잠금 (DML)
로 알고 있습니다.
제가 이해하기로는 트랜잭션 1이 한 테이블에 대해 DML 작업을 처리하는 도중 트랜잭션2는 트랜잭션1의 작업이 완료(commit or rollback)되기 이전에 해당 테이블에
dml 혹은 select 작업을 대기한다 라고 알고있습니다. (lock을 생성하는 대상이 테이블인지 row인지는 명확하게 모르겠습니다.. 답변주시면 감사하겠습니다.)
여기서 제가 궁금한 점은 만약 어플리케이션에서 하나의 서비스 메서드에 트랜잭션을 선언하고
그 서비스 메서드에
1)A table INSERT
2)B table update
3)C table delete
이러한 비지니스 로직이 있다면, 이 메서드가 완벽히 종류되기 이전에는 다른 트랜잭션에선 A,B,C테이블에 대해 대기상태인건지 궁금합니다.
명확하게는 어플리케이션에서 개발자가 명시하는 트랜잭션의 단위가, db서버 입장에서도 동등한 단위인지,아니면 개별 쿼리마다의 트랜잭션을 가져가는지, 또 이에 따라 lock이 생성되는건지가 궁금합니다.
답변주시면 감사하겠습니다!!