이론/자바 풀스택 국비수업

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