본문으로 바로가기

트랜잭션 / 트랜잭션 격리수준

category MYSQL 2022. 6. 3. 22:59
반응형

1. 트랜잭션(Transaction)

 - 데이터베이스 상태를 변화시키기 위한 작업 수행의 논리적인 단위

 -  SQL을 통해 데이터베이스의 상태를 변화시킴

 - 작업단위는 사용자가 특정 기능 수행을 위해 SQL작업을 묶은 단위

 

2. 트랜잭션의 예시

 1. NH은행에서 출금하여 KB은행으로 송금

 2. 송금하는 도중 알 수 없는 오류가 발생

 3. NH은행에서 돈은 이미 빠져나갔지만 KB은행에서는 입금되지 않음

 - 이러한 에러가 발생하면 은행간 데이터 불일치가 발생하기 때문에 이 같은 상황을 방지해야함

 - 이렇게 송금 과정이 모두 성공되어야만 작업이 성공(완료)되며, 과정 중 오류가 발생할 경우

   다시 처음부터 작업이 진행되도록 되돌림

 - 즉 두 과정을 하나의 과정으로 묶어서 작업 해아함

 

이러한 작업을 위해 데이터베이스는 두가지 명령어가 존재함

1. 커밋(Commit)  - 모든 부분작업이 정상적으로 완료되면 변경사항을 한꺼번에 데이터베이스 반영

2. 롤백(Rollback) - 작업 중(과정) 작업이 실패하면 트랜잭션 실행 전 상태로 되돌림  

                             데이터 불일치를 방지하기 위해 트랜잭션이 진행한 모든 연산을 취소하는 연산

 

3. SAVEPOINT

  - 모든 트랜잭션 연산을 취소하지 않고 원하는 부분까지 되돌리고 싶을 때 사용

  - 특정 부분에서 트랜잭션 취소시킬 수 있음

 

4. 트랜잭션 과정

  4-1. 활성(Active) : 트랜잭션이 정상적으로 실행중인 상태

  4-2. 실패(Failed) : 트랜잭션이 오류가 발생하여 중단된 상태

  4-3. 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 롤백(Rollback) 된 상태

  4-4. 부분완료(Partially Committed) : 트랜잭션의 마지막 연산까지 진행하고 커밋(Commit) 연산 실행되기 직전상태

  4-5. 완료(Commited) : 트랜잭션이 성공하여 커밋(Commit)된 상태

 

5. 트랜잭션 성질

  5-1. 원자성(Automicity)   : 트랜잭션 연산은 DB에 모두 반영되거나 전혀 반영되지 않아야 함

  5-2. 일관성(Consistency)  : 트랜잭션 수행 전과 수행 완료 상태가 같아야 함 

  5-3. 격리성(Isolation)       : 둘 이상의 트랜션이 동시에 병행 실행되고 있을 때,

                                           어떠한 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없음

  5-4. 지속성(Durability)     : 트랜잭션이 성공적으로 완료되면 결과는 영구적으로 반영되어야 함 

 

6. 트랜잭션 격리수준

  - 격리 레벨 설정에 따라 데이터 조회 결과가 달라짐

  6-1. 레벨 0 : Read UnCommited

                      - 커밋되지 않은 내용을 다른 트랜잭션에서 참조할 수 있음

  6-2. 레벨 1 : Read Commited

                      - 커밋된 내용만 다른 트랜잭션에서 참조할 수 있음

  6-3. 레벨 2 : Repetable Read 

                      - 트랜잭션 연산하기 이전 커밋된 내용만 참조할 수 있다.

  6-4 레벨  3 : Serialized Read

                      - 트랜잭션 연산 시 락을 걸어 다른 트랜잭션이 접근하지 못하게 함  

반응형

'MYSQL' 카테고리의 다른 글

sql_mode=only_full_group_by 에러 해결방법  (0) 2023.04.26
[MySql] SHOW PROCESSLIST  (0) 2022.10.11
대표적인 SQL 종류  (0) 2022.07.14
데이터베이스 인덱스(Index)  (0) 2022.06.01
Preparedstatement 사용이유  (0) 2022.05.17