본문 바로가기
DB

[MySQL/MariaDB] 트랜잭션(Transaction) 개념과 사용 (+ save point)

by 김비누! 2022. 3. 31.

트랜잭션(Transaction)이란?

한 기능을 수행하기 위해 한꺼번에 수행되어야 하는 연산을 의미한다.
DB의 일관성을 유지하며 문제 발생시 수월하게 복구할 수 있게 해준다.
하나의 트랜잭션을 DB에 반영하는 것을 커밋(commit) 이라고 하며 문제가 발생했을 때 트랜잭션을 반영하지 않고 원래 상태로 돌리는 것을 롤백(roll back)이라고 한다.

 

 

MySQL/MariaDB 에서는 default로 auto commit 모드가 TRUE로 설정되어있다.
트랜잭션을 사용하기 위해서는 auto commit 모드를 FALSE로 바꾸어주거나 start transaction으로 사용할 수 있다.


세이브 포인트(save point)

...

savepoint a;

...

rollback to a;

세이브 포인트는 트랜잭션을 분할, 세이브 포인트를 만들어 이 지점으로 롤백할 수 있게 해준다.
세이브 포인트는 여러개를 지정할 수 있는데 그 중 하나로 rollback할 경우 rollback 전 지정한 다른 세이브포인트들은 삭제된다.
전체 rollback을 하면 지정한 모든 세이브포인트가 삭제된다.

커밋 후에는 커밋 전 지정한 세이브 포인트를 사용할 수 없다.

사용예시

원본 테이블 test

트랜잭션 기본

start transaction; -- 트랜잭션 시작

insert mystudy.test values ('옥수수','미국','심심함');
insert mystudy.test values ('뽀로로','대구','노는게 제일좋아');

...

(rollback; 또는 commit;)

insert 수행 후 select를 해보면 데이터가 추가된 상태로 보이지만 실제로 데이터가 DB에 반영된 상태는 아니다.
rollback을 해주면 트랜잭션 전의 상태로 돌아가고, commit을 해주면 DB에 트랜잭션이 반영된다.

save point 사용

start transaction;
insert mystudy.test values ('옥수수','미국','심심함');
savepoint a;
insert mystudy.test values ('뽀로로','대구','노는게 제일좋아');
savepoint b;
insert mystudy.test values ('도우넛','서울','글레이즈드 도넛 최고');
rollback to a; 
rollback;

rollback to a 에서는 a 지점으로 rollback되어 옥수수만 추가된 상태가 된다.

다음 rollback을 하면 transaction 시작 전의 상태(원본테이블) 로 돌아간다.

댓글