Base/Database

[Database]트랜잭션(COMMIT,ROLLBACK)과 Lock 이란?

반응형

트랜잭션

 

데이터 일관성을 유지시키려는 목적으로 사용하는 논리적으로 연관된 작업들의 집합 / 일련의 일의 작업 단위이다.

이런 트랜잭션에는 하나 이상의 연관된 DML 구문과 하나 이상의 DDL 구문이 들어간다.

 

 

트랜잭션 시작

첫 번째 DML 구문이 실행될 때 시작됨

 

트랜잭션 종료

COMMIT / ROLLBACK 명령이 실행될 때 종료(COMMIT)

DDL 구문이 실행될 때 종류 -> (AUTO COMMIT)

비정상적으로 DBMS 종료되는 경우 -> AUTO ROLLBACK

 

 

DDL을 중간에 쓰게되면 AUTO COMMIT이 돼서 저장이 되어버린다.

그래서 보통 DDL을 중간에 안쓴다. DDL은 초반과 마지막에 들어간다.

 

--commit을 통한 트랜잭션 종료
INSERT INTO ~
UPDATE ~
COMMIT 				


--DDL을 통한 트랜잭션이 종료
UPDATE ~
DELETE FROM ~
CREATE OR REPLACE VIEW ~ 

 

 

트랜잭션 제어

 

COMMIT - 변경된 데이터를 저장하고 트랜잭션을 종료하는 명령

 

ROLLBACK - 변경 작업을 취소하고 트랜잭션을 종료하는 명령 / 기본적으로 데이터 상태를 트랜잭션의 시작 시점으로 돌림

     SAVEPOINT savepoint_name : 트랜잭션의 특정 시점을 기록하는 명령

     ROLLBACK TO savepoint_name : 지정한 특정 시점으로 데이터 상태를 되돌릴 수 있음

 

ALTER TABLE EMPLOYEE 

DISABLE CONSTRAINTS FK_MGRID; 

SAVEPOINT S0; --savepoint

INSERT INTO DEPARTMENT 

VALUES ('40','기획젂략팀','A1'); 

SAVEPOINT S1; --savepoint

UPDATE EMPLOYEE 

SET DEPT_ID = '40' 

WHERE DEPT_ID IS NULL; 

SAVEPOINT S2; --savepoint

DELETE FROM EMPLOYEE

--이런식으로 SAVEPOINT 지점을 잡아 준후 
--ROLLBACK TO S1/S2/S3 이런식으로 원하는 지점으로 돌아갈수 있게 끔 한다.

 

 

Lock 

동시성 제어 개념 : 다수 사용자들이 동시에 동일한 데이터에 접근하여 변경하려 하는 것을 제어한다. 

EX) 영화관 좌석 

 

특징

서로 다른 사용자가 동시에 동일한 행을 변경할 수 없도록 방지한다.

다른 사용자가 commit 되지 않은 변경 내용을 Overwrite 할 수 없도록 방지한다.

트랜잭션이 실행되는 동안 자동으로 수행/유지/관리한다.

 

 

 

이 두 개의 세션 중에 한쪽에서 커밋을 마치지 않은 상태에서 다른 SQL에 창에서 같은 데이터를 수정하려면 LOCK이 걸려서 되지 않는다.

 

 

반응형