트랜잭션(Transaction)
정보의 교환이나 데이터베이스 갱신 등과 연관 되는 작업들을 수행하는 작업의 논리적인 단위를 말한다. SELECT, INSERT, UPDATE, DELETE 등과 같은 조작어를 사용하는 행동을 의미하며 이런 트랜잭션은 상황에 따라 여러개가 만들어 질 수 있고, 그 각각의 트랜잭션들은 상황에 따라 Commit되거나 RollBack 될 수 있다.
- 원자성
- 일관성
- 독립성,격리성
- 영속성
트랜잭션 격리수준(Transaction Isolation Level)
특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지 결정하는 것을 말한다.
- READ UNCOMMITED
: 어떤 트랜잭션의 변경 내용이 Commit이나 RollBack과 상관 없이 다른 트랜잭션에서 보여진다.- READ COMMITED
: 어떤 트랜잭션의 변경 내용이 Commit 되어야만 다른 트랜잭션에서 조회 가능하다.- REPEATABLE READ
: 트랜잭션이 시작되기 전에 커밋 된 내용에 대해서만 조회 가능하다.- SERIALIZABLE
: 트랜잭션이 특정 테이블을 조회하면 다른 트랜잭션은 그 테이블의 데이터를 추가,변경,삭제가 불가능하다.
트랜잭션 연산
트랜잭션(Transaction) 상태
- 활동 : 트랜잭션이 실행 중인 상태
- 실패 : 트랜잭션 실행에 오류가 발생하여 중단 된 상태
- 철회 : 트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태
- 부분완료 :트랜잭션의 마지막 연산까지 실행 되어 commit 연산이 실행되기 직전의 상태
- 완료 : 트랜잭션이 성공적으로 종료 되어 commit 연산을 실행한 후의 상태
REDO, UNDO
- REDO
: 오래된 데이터를 최신 데이터로 만들기 위해 존재하며 복구를 위한 용도로 사용된다. 데이터의 손실을 방지한다.- UNDO
: 최신 데이터를 오래된 데이터로 만들기 위해 존재한다.
읽기 일관성을 보호한다.
- 읽기 일관성이란?
어떤 특정 세션에서 테이블의 데이터를 변경 중일 때 그 외 다른 세션에서는 데이터의 변경이 확정되기 전까지 변경사항을 알 필요가 없으므로, 데이터를 변경중인 세션을 제외한 나머지 세션에서는 현재 진행 중인 변경과 무관한 본래의 데이터를 보여주는 것을 말한다.
즉 REDO는 복구를 할 때 사용자가 했던 작업을 그대로 하지만, UNDO는 사용자가 했던 작업을 반대로 되돌린다.
ex) commit1 > commit2 > commit3일 때 commit1로 돌아가야 된다면
REDO : commit1의 로그를 찾아 덮는다.(commit2,commit3으로는 돌아갈 수 없다.)
UNDO : commit3 > commit2 > commit1 으로 순차적으로 돌가가기 때문에 commit2,commit3이 남아 있다.
🙇 참고 사이트 🙇
https://dkswnkk.tistory.com/555 https://velog.io/@yu-jin-song/DB-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction https://velog.io/@00yubin00/DB-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-EDO%EC%99%80-UNDO