티스토리 뷰

트랜잭션 구성

여러 DML 구문이 하나의 트랜잭션

- INSERT, UPDATE, DELETE

하나의 DDL 구문이 하나의 트랜잭션

- CREATE, ALTER, DROP, TRUNCATE

하나의 DCL 구문이 하나의 트랜잭션

- GRANT, REVOKE

DML

- 데이터를 건듬

- 사용자가 결정

DDL / DCL

- OBJECT 건듬

- 명령어 하나가 하나의 트랜잭션

- 엔터침과 동시에 영구히 저장되어서 실수하면 안 된다 ( AUTO COMMIT 내포 )


트랜잭션 시작 및 종료

시작

- 첫 번째 DML 구문 실행 시

종료

- COMMIT 또는 ROLLBACK 실행 시

- DDL 또는 DCL 구문 실행 시 ( autocommit)

- SQL *PLUS 정상 종료 시 (autocommit)

- 시스템 장애 시 (autorollback)


COMMIT

하나의 트랜잭션인 여러 DML(INSERT, DELETE 등) 명령어를 정상적으로 데이터베이스에 반영하겠다는 의미의 명령어

즉, 하나의 트랜잭션 과정이 정상적으로 종료하게 된다.

COMMIT 명령을 사용하지 않아도 자동 COMMIT이 되는 경우가 있다.

DDL(CREATE, DROP 등) 및 DCL 명령문을 수행하면 자동 COMMIT이 되고 데이터베이스를 정상적으로 종료하였을 경우 자동 COMMIT된다.


ROLLBACK

잘못된 명령이나 잘못된 데이터를 입력하는 등 문제가 발생하였을 때 하나의 트랜잭션을 취소하는 명령어

데이터베이스가 비정상적으로 종료된다면 자동으로 ROLLBACK이 된다.


SAVEPOINT

사용법 : SAVEPOINT 이름

- 트랜잭션 진행되는 중간 중간에 되돌아가는 기점을 만들어 놓는 것

- 트랜잭션 진행 중 트랜잭션 종료가 아니라 부분 취소로 위에 작업한 것을 살릴 수 있다

- 저장 되는게 아니라 임시 상태이다

- 중간 중간 포인트 찍은 것도 ROLLBACK, COMMIT 하면 다 없어진다. 자동으로 지워짐

특징이자 단점

- 논리적인 명령어

- 트랜잭션이 진행되는 동안 어떤 위치에 어떤 이름을 몇 개의 SAVEPOINT를 구현했는지 확인이 안 된다

- 확인가능한 명령어가 존재하지않는다

- 당사자가 기억을 해야 쓸 수 있다

- 그래서 기억하기 좋은 의미있는 이름으로 지어야한다

이름 지정

- 논리적인 데이터라 같은 이름 지정 가능하다

- 같은 이름인 A 이름으로 ROLLBACK 하면 마지막으로 지정한 포인트가 롤백이 된다

- 세이브 포인트가 깃발이라고 생각하면 된다

- A 깃발은 하나밖에 존재하지 않으니 최근껄로 덮어쓴다 ( 기존께 없어짐 )


1
2
3
UPDATE employees
SET salary = 78000
WHERE employee_id = 100;
cs


1
2
3
SELECT employee_id, salary
FROM employees
WHERE employee_id = 100;
cs


1
SAVEPOINT up_100_sal;
cs


1
2
3
UPDATE employees
SET salary = 56000
WHERE employee_id = 101;
cs


1
2
3
SELECT employee_id, salary
FROM employees
WHERE employee_id IN (100101);
cs


1
ROLLBACK to up_100_sal;
cs


1
2
3
SELECT employee_id, salary
FROM employees
WHERE employee_id IN (100101);
cs


1
COMMIT;
cs


공지사항
최근에 올라온 글
Total
Today
Yesterday