트랜잭션이란 '거래'라는 뜻으로 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 예제하면서 지워졌다.
이것을 진행하면 commit하기 전으로 돌아가게 된다.
ROLLBACK;
위에서 아직 완전 저장이 되지 않았기 때문에

이전처럼 ROLLBACK이 된다.
앞으로도 예제를 계속 해나갈 것이기 때문에 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는 '임시저장' 의 역할을 한다.
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이 가능하다.