트랜잭션(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 시작 전의 상태(원본테이블) 로 돌아간다.
'DB' 카테고리의 다른 글
[MySQL/MariaDB] 사용자 계정 및 권한 관리 (grant, revoke) (0) | 2022.04.18 |
---|---|
[SQL] DB 테이블 구조, 데이터 복사 (0) | 2022.03.31 |
[SQL] group by - 그룹 함수, 그룹 조회 (0) | 2022.03.30 |
[SQL] DISTINCT 키워드 (중복제거) (0) | 2022.03.29 |
[SQL] lpad/rpad 함수 사용하여 특정 문자로 자릿수 채우기 (0) | 2022.03.29 |
댓글