[SQL] Transaction(트랜잭션)

제훈·2024년 6월 26일
0

SW공학, DB

목록 보기
10/21

트랜잭션이란 '거래'라는 뜻으로 DB 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위이다.

  • 여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료된다.
  • 하나의 명령어라도 잘못되면 전체 취소된다.
  • 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위해 사용한다.

시작하기 전

autocommit 이 set 되어 있을 수 있다.

-- autocommit 비활성화
SET autocommit = 0;
SET autocommit = OFF;

둘 중 하나를 하자. 반대로 키고 싶다면

SET autocommit = 1;
SET autocommit = ON;

트랜잭션

트랜잭션을 시작할 때는 이것을 적고 단계를 정한다.

START TRANSACTION;

-- 1단계
INSERT
  INTO tbl_menu
VALUES
(
  NULL, '바나나해장국', 8500
, 4, 'Y'
);

-- 2단계
UPDATE tbl_menu
	SET menu_name = '수정된 메뉴'
 WHERE menu_code = 5;

만약 시작하기 전에 autocommit을 끄지 않았다면 2단계까지 진행하면서 commit이 2번 진행돼 처리과정을 DB에 영구 저장하게 된다.

하지만 꺼뒀기 때문에?
아직은 영구 저장이 되지는 않은 채로 우리 눈에는 바뀐 것처럼 보이게 된다.

25, 26 메뉴는 이전에 DELETE 예제하면서 지워졌다.


ROLLBACK

이것을 진행하면 commit하기 전으로 돌아가게 된다.

ROLLBACK;

위에서 아직 완전 저장이 되지 않았기 때문에

이전처럼 ROLLBACK이 된다.


COMMIT

앞으로도 예제를 계속 해나갈 것이기 때문에 commit은 하지 않을 것이다.
autocommit을 키고 예제를 진행하거나

-- 1단계
INSERT
  INTO tbl_menu
VALUES
(
  NULL, '바나나해장국', 8500
, 4, 'Y'
);

commit;

-- 2단계
UPDATE tbl_menu
	SET menu_name = '수정된 메뉴'
 WHERE menu_code = 5;
 
commit;

이것처럼 성공하는 단계마다 commit을 추가해주면 된다.


SAVEPOINT

SAVEPOINT는 '임시저장' 의 역할을 한다.

  • ROLLBACK 과 달리 특정 부분에서 트랜잭션을 취소시킬 수 있다.
  • SAVEPOINT를 지정한뒤 ROLLBACK TO SAVEPOINT 이름;을 실행하면 지정한 해당 SAVEPOINT 지점까지 처리한 작업이 취소(ROLLBACK)된다.
SAVEPOINT S1;
-- 1단계
INSERT
  INTO tbl_menu
VALUES
(
  NULL, '바나나해장국', 8500
, 4, 'Y'
);

SAVEPOINT S2;

-- 2단계
UPDATE tbl_menu
	SET menu_name = '수정된 메뉴'
 WHERE menu_code = 5;

위와 같이 SAVEPOINT 를 S1, S2로 만들어주고

ROLLBACK TO S1
-- ROLLBACK TO S2

을 통해 S1 이나 S2과 같이 특정 구간 ROLLBACK이 가능하다.

profile
백엔드 개발자 꿈나무

0개의 댓글