1. Transaction
- 데이터베이스의 상태를 변화시키는 일종의 작업 단위
| 트랙잭션 도구 | 설명 |
| START TRANSACTION | 트랜잭션을 시작하는 명령어 |
| COMMIT | 수정된 내용을 데이터베이스에 반영하는 명령어 |
| ROLLBACK | 트랜잭션에서 수행된 모든 변경을 원래대로 되돌리는 명령어 |
| SAVEPOINT | 롤백을 원하는 특정 시점을 지정하는 명령어 |
mysql은 기본적으로 autocommit으로 설정되어 있다.
autocommit이면 실행과 동시에 데이터베이스에 변화를 반영한다.
끄면 commit 전까진 메모리 상에서만 데이터를 변경하고 실제 데이터베이스에선 변화하지 않는다.
-- 확인
select @@autocommit; -- 1인 경우 autocommit
-- 변경
set autocommit = 1; -- on
set autocommit = 0; -- off
Code language: JavaScript (javascript)
단, 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;
Code language: JavaScript (javascript)
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;
Code language: JavaScript (javascript)
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;
Code language: JavaScript (javascript)
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 등등을 사용하기도 한다.