트렌젝션에 저장된 SQL 명령을 실제 테이블에 적용하여 실행하거나 적용하지 않고 취소하는 명령
클라이언트에서 작성한 SQL 명령을 서버에 전달하여 테이블에 바로 적용하는 것이 아니라 트렌젝션에 저장하여 나중에 실행되도록 처리
트렌젝션(TRANSACTION) : 세션에서 DBMS 서버에 전달되어 실행될 SQL 명령들을 저장하기 위한 작업단위 (SQL 명령 그룹)
세션(SESSSION) : DBMS 서버에 접속하여 SQL 명령을 전달하여 실행하기 위한 사용자의 작업환경
커밋(COMMIT) 처리 → 커밋 처리후 트렌젝션 초기화
--DEPT 테이블에 저장된 모든 부서정보 검색
--트렌젝션에 저장된 SQL 명령이 없으므로 실제 테이블의 행을 검색하여 결과 제공
SELECT * FROM DEPT;
--DEPT 테이블에서 부서번호가 50인 부서정보 삭제
--DELETE 명령을 서버에 전달하면 DEPT 테이블의 행을 삭제하지 않고 트렌젝션에 DELETE 명령 저장
DELETE FROM DEPT WHERE DEPTNO=50;
--실제 테이블의 행을 검색하여 트렌젝션에 저장된 SQL 명령(DELETE)이 실행된 결과 제공
SELECT * FROM DEPT;
--롤백 처리 - 트렌젝션에 저장된 SQL 명령 삭제
ROLLBACK;
SELECT * FROM DEPT;--실제 테이블의 검색결과 제공 (삭제명령실행X)
--DEPT 테이블에서 부서번호가 50인 부서정보 삭제
DELETE FROM DEPT WHERE DEPTNO=50;
--커밋 처리 : 트렌젝션에 저장된 SQL 명령(DELETE)을 실제 테이블에 적용 - 트렌젝션 초기화
COMMIT;--실제 테이블에 저장된 행 삭제
SELECT * FROM DEPT;--실제 테이블의 검색결과 제공 (삭제명령실행)
--EMP 테이블에 저장된 모든 사원정보 삭제
DELETE FROM EMP;
SELECT * FROM EMP;
--서버에 전달된 SQL 명령이 잘못된 경우 롤백 처리를 통한 데이타 복구를 위해 트렌젝션 사용
--데이타 무결성 유지를 위한 방법
ROLLBACK;
SELECT * FROM EMP;
--현재 세션에서 작업중인 결과를 커밋 전까지 다른 세션에서 검색되지 않도록 트렌젝션 사용
--데이타 일관성을 제공하는 방법
--데이타 일관성 : DBMS를 사용하는 모든 사용자에게 동일한 검색결과를 제공
--BONUS 테이블에서 사원이름이 KIM인 사원정보 삭제
SELECT * FROM BONUS;
DELETE FROM BONUS WHERE ENAME='KIM';
SELECT * FROM BONUS;
--다른 세션에서는 BONUS 테이블에서 사원이름이 KIM인 사원정보 검색
--현재 세션에서 커밋 처리를 하기 전까지 다른 세션에서는 SQL 명령이 실행되기 전의 검색결과 제공
--데이타 일관성
COMMIT;--현재 세션에서 커밋 처리를 해야만 다른 세션에서도 SQL 명령이 적용된 검색결과 제공
--데이타 잠김(LOCK) 기능을 제공하기 위해 트렌젝션 사용
--DBMS는 다중 사용자 환경으로 같은 테이블의 행을 다른 세션에서 조작 가능
--현재 세션에서 작업중인 테이블의 행을 다른 세션에서 작업하지 못하도록
--트렌젝션을 사용하여 데이타 잠금 기능 제공
--BONUS 테이블에서 사원이름이 ALLEN인 사원의 급여를 2000으로 변경
SELECT * FROM BONUS;
UPDATE BONUS SET SAL=2000 WHERE ENAME='ALLEN';--데이타 잠김
SELECT * FROM BONUS;
--다른 세션에서 BONUS 테이블에서 사원이름이 ALLEN인 사원의 성과급을 급여의 50%로 변경
--UPDATE BONUS SET COMM=SAL*0.5 WHERE ENAME='ALLEN';
--현재 세션에서 작업중인 테이블의 행을 다른 세션에서 조작할 경우
--트렌젝션에 의해 데이타 잠김 기능으로 인해 세션 일시 중지
--현재 세션에서 작업중인 DML 명령을 커밋 또는 롤백 처리를 해야만 다른 세션의 DML 명령이 실행
COMMIT;
트렌젝션에 라벨(위치정보)을 붙이는 명령
트렌젝션에 저장된 라벨을 이용하여 원하는 위치의 DML 명령들을 롤백 처리하기 위해 사용
형식) SAVEPOINT 라벨명
SAVEPOINT 명령으로 설정된 라벨을 이용하여 롤백 처리
형식) ROLLBACK TO 라벨명
--BONUS 테이블에서 사원이름이 ALLEN인 사원정보 삭제
SELECT * FROM BONUS;
DELETE FROM BONUS WHERE ENAME='ALLEN';
SELECT * FROM BONUS;
--BONUS 테이블에서 사원이름이 MARTIN인 사원정보 삭제
DELETE FROM BONUS WHERE ENAME='MARTIN';
SELECT * FROM BONUS;
--롤백 처리
ROLLBACK;--트렌젝션에 저장된 모든 DML 명령을 삭제
SELECT * FROM BONUS;
--BONUS 테이블에서 사원이름이 ALLEN인 사원정보 삭제
DELETE FROM BONUS WHERE ENAME='ALLEN';
SELECT * FROM BONUS;
SAVEPOINT ALLEN_DELETE_AFTER;--트렌젝션에 라벨 부착
--BONUS 테이블에서 사원이름이 MARTIN인 사원정보 삭제
DELETE FROM BONUS WHERE ENAME='MARTIN';
SELECT * FROM BONUS;
--SAVEPOINT 명령으로 설정된 라벨을 이용하여 롤백 처리
--형식) ROLLBACK TO 라벨명
--트렌젝션에서 사원이름이 MARTIN인 사원정보를 삭제하는 DELETE 명령 제거
ROLLBACK TO ALLEN_DELETE_AFTER;
SELECT * FROM BONUS;
ROLLBACK;--트렌젝션에 저장된 모든 DML 명령 제거
SELECT * FROM BONUS;