위로
아래
트랜잭션
트랜젝션(Transaction)
- 데이터베이스의 상태를 변화시키기 위해 수행(INSERT, SELECT, UPDATE, DELETE)하는 작업의 단위
- 트랜잭션의 범위는 최소화하는 것이 좋다. 데이터베이스의 커넥션 수는 제한적인데, 트랜잭션이 길어서 커넥션 사용 기간이 길어지면, 다른 로직에서 커넥션을 기다리게 될 수도 있다.
ACID
원자성 (Atomicity)
- 트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영되지 않아야 한다.
- 트랜잭션의 모든 명령은 반드시 완벽하게 수행되어야 하며, 어느 한 지점에서라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
일관성 (Consistency)
- 트랜잭션의 작업 처리 결과가 항상 일관되어야 한다.
- 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 수행 후의 상태가 같아야 한다.
- 트랜잭션 도중에 데이터베이스가 변경되더라도, 변경된 데이터가 아니라 처음 데이터로 트랜잭션이 진행되어야 한다.
독립성 (Isolation)
- 둘 이상의 트랜잭션을 동시에 실행하고 있을 경우, 어떤 하나의 트랜잭션이 다른 트랜잭션의 연산에 끼어들 수 없다.
- 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
지속성 (Durability)
- 트랜잭션이 성공적으로 완료되었을 경우, 결과가 영구적으로 반영되어야 한다.
Commit, Rollback, Savepoint
Commit
- 하나의 트랜잭션이 끝났음을 알리는 연산.
- 수행했던 트랜잭션을 로그에 저장한다.
Rollback
- 트랜잭션을 처음부터 다시 시작하거나 트랙잭션의 연산된 결과를 부분적으로 취소시킨다.
Savepoint
- 트랜잭션 사이에 있으면, 롤백 시 savepoint까지만 롤백된다.
예시
더보기
INSERT INTO dept1
VALUES(98,'인사과','서울');
SAVEPOINT A;
INSERT INTO emp (empno, ename, deptno)
VALUES(7777,'못난이',30);
ROLLBACK TO A;
SELECT * FROM dept1;
SELECT empno, deptno FROM emp;
ROLLBACK;