이론/자바 풀스택 국비수업
220420 데이터베이스 COMMIT, ROLLBACK
달거북씨
2022. 4. 28. 01:51
1. COMMIT
모든 작업을 정상적으로 처리하겠다고 확정하는 명령어
트랜잭션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.
COMMIT을 수행하면, 하나의 트랜잭션 과정을 종료하기 된다.
- 트랜잭션 작업 내용을 실제 DB에 저장한다.
- 이전 데이터가 완전히 UPDATE 된다.
- 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.
1-1. AUTO COMMIT
자동 COMMIT 옵션
2. ROLLBACK
작업 중 문제가 발생했을 때, 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하고, 트랜잭션 과정을 종료시킨다.
트랜잭션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
- 트랜잭션 작업 내용을 취소한다.
- 이전 COMMIT까지만 복구한다.
트랜잭션 작업 중 하나라도 문제가 발생하면, 모든 작업을 취소해야 하기 때문에 하나의 논리적인 작업 단위로 구성해 놓아야 한다. 문제가 발생하면, 논리적인 작업의 단위를 모두 취소해 버리면 되기 때문이다.
2-1. 자동 ROLLBACK 되는 경우
비정상적인 종료
2-2. 자동 COMMIT 되는 경우
- DDL문(CREATE, ALTER, DROP, TRUNCATE)
- DCL문(GRANT, REVOKE) 사용권한
- INSERT, UPDATE, DELETE 작업 후 정상 종료시, COMMIT 명령어를 입력하지 않아도 정상적으로 COMMIT 후 종료됨
3. 실습
/*
* table 생성
* 테이블 이름 : sample,
* 컬럼 : deptNo / NUMBER(20)
* deptName / varchar2(15)
* deptLoc / varchar2(15)
* deptManager / varchar2(10)
* 데이터 insert : 10, 기획실, 서울, 홍길동
* 20, 전산실, 부산, 김말똥
* 30, 영업부, 광주, null
* 데이터 전체 select
* 데이터 update : deptNo가 30인 부서를 50으로 수정
* deptName 영업부의 deptLoc을 인천으로 수정
* 데이터 delete : deptName 영업부의 데이터 삭제
*/
-- table 생성
CREATE TABLE SAMPLE(
deptNo NUMBER(20),
deptName VARCHAR2(15),
deptLoc VARCHAR2(15),
deptManager VARCHAR2(10)
);
-- 데이터 INSERT
-- 전체 실행 : Alt + x
INSERT INTO SAMPLE VALUES (10, '기획실', '서울', '홍길동');
INSERT INTO SAMPLE VALUES (20, '전산실', '부산', '김말똥');
INSERT INTO SAMPLE VALUES (30, '영업부', '광주', NULL);
-- 전체 데이터 SELECT
SELECT * FROM SAMPLE s ;
-- 데이터 UPDATE
-- UPDATE 테이블명 SET 컬럼1 = 값, 컬럼2 = 값, ...
-- ★WHERE 조건;
UPDATE SAMPLE SET deptNo = 50
WHERE deptNo = 30
;
UPDATE SAMPLE SET deptLoc = '인천'
WHERE deptName = '영업부'
;
-- 데이터 DELETE
-- DELETE 테이블명
-- ★WHERE 조건;
DELETE SAMPLE
WHERE deptName = '전산실'
;
SELECT * FROM SAMPLE s ;
-- 오토커밋 해제 후
-- 1. DELETE 후 ROLLBACK 해보기
-- 2. DELETE 후 COMMIT 후 ROLLBACK 해보기
DELETE sample;
ROLLBACK;
COMMIT;
▶ 오토커밋이 해제된 상태에서는 DELETE를 하면, 테이블이 삭제되기는 하나 COMMIT이 되지 않아 ROLLBACK 했을 때 다시 테이블이 생성된다.
▶ DELETE 후 COMMIT을 하면 테이블이 삭제된 상태가 저장되기 때문에 ROLLBACK을 해도 테이블이 다시 생성되지 않는다.
▶ 오토커밋 상태는 모든 명령어마다 자동으로 저장이 된다.
728x90