TRANSACTION
•
더 이상 분할이 불가능한 업무처리의 단위. 즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미합니다.
•
작업의 안전성을 확보하기 위해 트랜잭션 내의 모든 명령은 성공하거나 실패해야합니다. (원자성)
•
트랜잭션 기능은 엔진의 영향을 받기 때문에 InnoDB를 사용해야 트랜잭션을 사용할 수 있습니다.
-- 트랜잭션 시작
START TRANSACTION;
-- 작업
SELECT ~;
INSERT INTO ~;
SELECT ~;
-- 커밋 혹은 롤백
COMMIT or ROLLBACK
SQL
복사
트랜잭션 특징
•
원자성(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;
SQL
복사