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 |