SQLD - TCL(Transaction Control Language)

헨도·2024년 2월 22일
0

SQLD

목록 보기
24/28
post-thumbnail

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로 취소되었다.
profile
Junior Backend Developer

0개의 댓글