[DB] Transaction
2024. 4. 14. 23:13ㆍBE/DB
1. Transaction
- 데이터베이스의 상태를 변화시키는 일종의 작업 단위
트랙잭션 도구 | 설명 |
START TRANSACTION | 트랜잭션을 시작하는 명령어 |
COMMIT | 수정된 내용을 데이터베이스에 반영하는 명령어 |
ROLLBACK | 트랜잭션에서 수행된 모든 변경을 원래대로 되돌리는 명령어 |
SAVEPOINT | 롤백을 원하는 특정 시점을 지정하는 명령어 |
mysql은 기본적으로 autocommit
으로 설정되어 있다.
autocommit
이면 실행과 동시에 데이터베이스에 변화를 반영한다.
끄면 commit
전까진 메모리 상에서만 데이터를 변경하고 실제 데이터베이스에선 변화하지 않는다.
-- 확인
select @@autocommit; -- 1인 경우 autocommit
-- 변경
set autocommit = 1; -- on
set autocommit = 0; -- off
단, DCL, DML의 autocommit
은 풀 수 없다.
가. COMMIT
start transaction;
insert into tc_test
values ('a');
insert into tc_test
values ('b');
insert into tc_test
values ('c');
insert into tc_test
values ('e');
insert into tc_test
values ('f');
commit;
commit
: 모두 데이터베이스에 반영된다.
나. ROLLBACK
start transaction;
insert into tc_test
values ('a');
insert into tc_test
values ('b');
insert into tc_test
values ('c');
insert into tc_test
values ('e');
insert into tc_test
values ('f');
rollback;
commit;
a
, b
, c
, d
, e
, f
모두 데이터베이스에 안 들어감.
다. SAVEPOINT
start transaction;
insert into tc_test
values ('a');
insert into tc_test
values ('b');
insert into tc_test
values ('c');
savepoint p1;
insert into tc_test
values ('e');
insert into tc_test
values ('f');
rollback to p1;
commit;
savepoint p1;
: 세이브포인트를 지정한다.rollback to p1;
:e
,f
는 없었던 일이 된다.
라. AUTO_INCREMENT와 ROLLBACK
MySQL에서는 AUTO_INCREMENT
는 롤백되지 않는다.
InnoDB의 AUTO_INCREMENT
값은 한번 사용되면 트랜잭션이 ROLLBACK
되어도, 이미 사용된 AUTO_INCREMENT
값은 복구되지 않는다.
ROLLBACK
을 실행해도 AUTO_INCREMENT
의 다음 숫자는 rollback
이전과 같다.
그래서 AUTO_INCREMENT
대신에 서브쿼리, UUID 등등을 사용하기도 한다.
'BE > DB' 카테고리의 다른 글
[DB] VIEW (0) | 2024.06.22 |
---|---|
[DB] INDEX (1) | 2024.04.15 |
[DB] SET Operator (0) | 2024.04.14 |
[DB] 내장함수 (0) | 2024.04.14 |
[DB] NULL, CASE, ESCAPE (0) | 2024.04.14 |