MySQL 트랜잭션 경계

START TRANSACTION은 autocommit 규칙 위에
새로운 작업 경계를 엽니다

기본값이 autocommit=1이어도, 시작 구문을 만나는 순간부터는 각 DML이 따로 확정되지 않고 COMMIT/ROLLBACK까지 하나의 묶음으로 유지됩니다.

같은 세션에서 경계가 바뀌는 순간
회색 구간은 문장 단위 자동 커밋, 초록 구간은 명시적 트랜잭션 범위
START TRANSACTION이 열린 뒤에는 종료 시점까지 하나의 트랜잭션
세션 상태
@@autocommit = 1

기본 모드는 그대로 켜져 있습니다.

문장마다 자동 확정 준비
기본 동작
UPDATE ...

트랜잭션을 따로 열지 않으면 이 문장 하나가 바로 끝납니다.

실행 직후 자동 COMMIT
경계 열기
START TRANSACTION;

autocommit 설정과 무관하게 명시적 트랜잭션을 시작합니다.

이 지점부터 묶음 처리 시작
묶인 변경
UPDATE ...

뒤따르는 DML은 각각 확정되지 않고 같은 변경 집합에 쌓입니다.

아직 외부에는 미확정 상태
종료
COMMIT / ROLLBACK

이때 한꺼번에 확정하거나 전부 되돌립니다.

여기서 트랜잭션 경계 닫힘
세션 전체 모드를 바꾸는 경우
SET autocommit = 0;

이후의 여러 DML 전체가 수동 커밋 흐름으로 바뀝니다. 세션 설정을 바꾸는 것이지, 특정 한 묶음을 표시하는 명령은 아닙니다.

지금부터 한 묶음만 분리하는 경우
START TRANSACTION;

현재 시점부터 COMMIT/ROLLBACK 전까지만 명시적으로 잡습니다. 그래서 기본 autocommit=1 환경에서도 안전하게 여러 문장을 묶을 수 있습니다.

핵심 해석: autocommit이 켜져 있어도, 이 명령을 만나면 DB는 "이제부터는 문장별 자동 확정이 아니라 하나의 트랜잭션 경계로 본다"라고 처리합니다.