📚 Study/MySQL
[MySQL] TRANSACTION
0_ch4n
2022. 7. 2. 00:43
반응형
✔️ TRANSACTION
- 더 이상 분할이 불가능한 업무처리의 단위. 즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미합니다.
- 작업의 안전성을 확보하기 위해 트랜잭션 내의 모든 명령은 성공하거나 실패해야합니다. (원자성)
- 트랜잭션 기능은 엔진의 영향을 받기 때문에 InnoDB를 사용해야 트랜잭션을 사용할 수 있습니다.
-- 트랜잭션 시작
START TRANSACTION;
-- 작업
SELECT ~;
INSERT INTO ~;
SELECT ~;
-- 커밋 혹은 롤백
COMMIT or ROLLBACK
📌 트랜잭션 특징
- 원자성(Atomicity)
- 트랜잭션이 데이터베이스에 모두 반영되던가 전혀 반영되지 않아야 한다는 것입니다.
- 일관성(Consistency)
- 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것입니다.
- 트랜잭션 진행 동안 데이터베이스가 변경되더라도 처음 참조한 데이터베이스로 진행됩니다.
- 독립성(Isolation)
- 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없습니다.
- 특정 트랜잭션이 완료될 때까지 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없습니다.
- 영구성(Durability)
- 트랜잭션이 성공적으로 완료됐을 경우 결과는 영구적으로 반영되어야 합니다.
📌 트랜잭션 상태
- 데이터베이스 시스템에서 복구 및 병행 수행 시 처리되는 작업의 논리적 단위입니다.
- 활성(Active)
- 트랜잭션이 정상적으로 실행 중인 상태를 의미합니다.
- 부분 완료(Partially Committed)
- 트랜잭션의 마지막까지 실행되었지만 Commit 연산이 실행되기 직전의 상태입니다.
- 완료(Committed)
- 트랜잭션이 성공으로 종료되어 Commit 연산을 실행한 후의 상태입니다.
- 실패(Failed)
- 트랜잭션 실행에 오류가 발생하여 중단된 상태입니다.
- 철회(Aborted)
- 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태입니다.
📌 트랜잭션 예외
- CREATE, DROP, ALTER, RENAME, TRUNCATE문은 Rollback 대상이 아닙니다.
📌 트랜잭션 전역설정
- MySQL은 기본적으로 Auto commit이 ON입니다.
-- 오토커밋 off
SET AUTOCOMMIT = 0;
-- 오토커밋 on
SET AUTOCOMMIT = 1;
-- 오토커밋 설정 확인
SELECT @@autocommit;
반응형