트랜잭션은 데이터베이스 관리 시스템(DBMS)에서 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)의 ACID 특성을 보장합니다.
트랜잭션을 관리하기 위한 기본적인 SQL 명령어는 다음과 같습니다:
BEGIN 또는 START TRANSACTION: 트랜잭션의 시작을 명시합니다.COMMIT: 트랜잭션을 완료하고 모든 변경 사항을 영구적으로 저장합니다.ROLLBACK: 트랜잭션을 취소하고 모든 변경 사항을 원래 상태로 되돌립니다.-- 빈 테이블 c_emp100 생성
CREATE TABLE c_emp100 AS
SELECT * FROM emp WHERE 1=0;
-- c_emp100 테이블 내용 확인
SELECT * FROM c_emp100;
-- 트랜잭션 시작
BEGIN
FOR i IN 1..10000 LOOP
INSERT INTO c_emp100
SELECT * FROM emp;
END LOOP;
END;
-- c_emp100 테이블 내용 확인
SELECT * FROM c_emp100;
-- 전체 변경사항 저장
COMMIT;
-- 전체 변경사항 취소 (이전 커밋으로 돌아가기 때문에 실제 효과 없음)
ROLLBACK;
-- 데이터 업데이트 및 삭제
UPDATE c_emp100 SET sal = 1000;
DELETE FROM c_emp100 WHERE deptno = 20;
UPDATE c_emp100 SET sal = 200 WHERE deptno = 30;
UPDATE c_emp100 SET sal = 100 WHERE deptno = 10;
-- 특정 데이터 업데이트
UPDATE c_emp100 SET sal = 888 WHERE deptno = 10;
-- 저장점 설정
SAVEPOINT update_sal;
-- 추가 데이터 업데이트
UPDATE c_emp100 SET sal = 99 WHERE deptno = 30;
-- 또 다른 저장점 설정
SAVEPOINT update_sal_30;
-- 현재 상태 확인
SELECT * FROM c_emp100;
SELECT SUM(sal) FROM c_emp100;
-- 첫 번째 저장점으로 롤백
ROLLBACK TO SAVEPOINT update_sal;
-- 롤백 후 상태 확인
SELECT * FROM c_emp100;
SELECT SUM(sal) FROM c_emp100;
테이블 생성 및 초기 데이터 확인:
CREATE TABLE c_emp100 AS
SELECT * FROM emp WHERE 1=0;
SELECT * FROM c_emp100;
c_emp100 테이블을 emp 테이블과 동일한 구조로 생성합니다. 처음에는 데이터가 없습니다.
트랜잭션 시작 및 데이터 삽입:
BEGIN
FOR i IN 1..10000 LOOP
INSERT INTO c_emp100
SELECT * FROM emp;
END LOOP;
END;
c_emp100 테이블에 emp 테이블의 데이터를 10000번 반복하여 삽입합니다.
변경사항 저장 및 확인:
SELECT * FROM c_emp100;
COMMIT;
c_emp100 테이블의 데이터를 확인하고, 변경사항을 저장합니다.
변경사항 취소:
ROLLBACK;
COMMIT 이후의 변경사항을 취소합니다. 실제로는 영향이 없습니다.
데이터 업데이트 및 삭제:
UPDATE c_emp100 SET sal = 1000;
DELETE FROM c_emp100 WHERE deptno = 20;
UPDATE c_emp100 SET sal = 200 WHERE deptno = 30;
UPDATE c_emp100 SET sal = 100 WHERE deptno = 10;
특정 데이터 업데이트 및 저장점 설정:
UPDATE c_emp100 SET sal = 888 WHERE deptno = 10;
SAVEPOINT update_sal;
UPDATE c_emp100 SET sal = 99 WHERE deptno = 30;
SAVEPOINT update_sal_30;
현재 상태 확인 및 저장점으로 롤백:
SELECT * FROM c_emp100;
SELECT SUM(sal) FROM c_emp100;
ROLLBACK TO SAVEPOINT update_sal;
SELECT * FROM c_emp100;
SELECT SUM(sal) FROM c_emp100;
update_sal 저장점으로 롤백하여 이후 변경사항을 취소합니다.