COMMIT
- COMMIT 은 INSERT, UPDATE, DELETE 문으로 변경한 데이터를 데이터베이스에 반영한다.
- 변경 이전 데이터는 잃어버린다.
즉, A 값을 B로 변경하고 COMMIT을 하면 A 값은 잃어버리고 B 값을 반영한다.
- 다른 모든 데이터베이스 사용자는 변경된 데이터를 볼 수 있다.
- COMMIT 이 완료되면 데이터베이스 변경으로 인한 LOCK이 해제(UNLOCK)된다.
- COMMIT 이 완료되면 다른 모든 데이터베이스 사용자는 변경된 데이터를 조작할 수 있다.
- COMMIT 을 실해앟면 하나의 트랜잭션 과정을 종료한다.
UPDATE emp
SET
enmae = '임베스트'
WHERE
empno = 1000;
commit;
- emp 테이블에서 사원번호 1000번의 ename을 '임베스트'로 변경한다.
- commit 을 실행해서 데이터베이스에 반영한다.
- Oracle 데이터베이스는 암시적 트랜잭션 관리를 한다.
즉, Oracle 데이터베이스로 트랜잭션을 시작하고 트랜잭션의 종료는 Oracle 데이터베이스 사용자가 COMMIT 혹은 ROLLBACK 으로 처리해야 한다.
Auto commit
- SQL*PLUS 프로그램을 정상적으로 종료하는 경우 자동 COMMIT이 된다.
- DDL 및 DCL 을 사용하는 경우 자동 COMMIT 된다.
- "set autocommit on;"을 SQL*PLUS 에서 실행하면 자동 COMMIT 된다.
ROLLBACK
- ROLLBACK 을 실행하면 데이터에 대한 변경 사용을 모두 취소하고 트랜잭션을 종료한다.
- INSERT, UPDATE, DELETE 문의 작업을 모두 취소한다.
단, 이전에 COMMIT 한 곳까지만 복구한다.
- ROLLBACK 을 실행하면 LOCK이 해제되고 다른 사용자도 데이터베이스 행을 조작할 수 있다.
UPDATE emp
SET
ename = '조조'
WHERE
empno = 1001;
SELECT ename
FROM emp
WHERE empno = 1001; -> ENAME : 조조
rollback;
- 변경된 사항을 취소한다.
SAVEPOINT (저장점)
- SAVEPOINT 는 트랜잭션을 작게 분할하여 관리하는 것으로 SAVEPOINT 를 사용하면 지정된 위치 이후의 트랜잭션만 ROLLBACK 할 수 있다.
- SAVEPOINT 의 지정은 SAVEPOINT <SAVEPOINT 명>을 실행한다.
- 지정된 SAVEPOINT 까지만 데이터 변경을 취소하고 싶은 경우는 "ROLLBACK TO <SAVEPOINT 명>"을 실행한다.
- "ROLLBACK"을 실행하면 SAVEPOINT 와 관계없이 데이터의 모든 변경사항을 저장하지 않는다.
savepoint t1; -> SAVEPOINT t1 지정
UPDATE emp
SET
ename = '관우'
WHERE
empno = 1003;
savepoint t2; -> SAVEPOINT t2 지정
UPDATE emp
SET
ename = '장비'
WHERE
empno = 1004;
SELECT ENAME
FROM emp
WHERE
empno in (1003, 1004); -> ENAME : 관우, 장비
rollback to t2 -> SAVEPOINT t2 까지 변경된 것을 취소한다.
SELECT ENAME
FROM emp
WHERE
empno in (1003, 1004); -> ENAME : 관우, test5
- UPDATE로 변경된 "장비"만 test5로 취소되었다.