학습 포인트

DDL을 실행하는 순간,
미커밋 변경의 운명이 갈립니다

같은 UPDATE에서 출발해도 Oracle·MySQL은 DDL이 나오면 이전 변경을 먼저 확정하고, PostgreSQL은 DDL까지 같은 트랜잭션 안에 남겨 둘 수 있습니다.

공통 시작점
UPDATE accounts
SET balance = balance - 100000
WHERE id = 1;
-- 아직 COMMIT 안 함
여기서 바로 CREATE TABLE을 실행하면 어떤 엔진은 경계를 닫고, 어떤 엔진은 아직 같은 작업 단위로 유지합니다.
갈라지는 기준

Oracle · MySQL

DDL이 경계가 됨

구조 변경 명령이 나오면 현재 트랜잭션이 자동 커밋되어, 앞서 하던 DML이 먼저 확정됩니다.

CREATE TABLE temp_log (...);
-- 이전 UPDATE 자동 COMMIT

PostgreSQL

DDL도 경계 안

BEGIN 안에서 실행한 DDL도 같은 트랜잭션에 포함되어, 확인 후 한 번에 되돌릴 수 있습니다.

BEGIN;
CREATE TABLE new_table (...);
ROLLBACK;
DDL 직후
이전 UPDATE가 즉시 확정됨

CREATE, ALTER, DROP가 현재 트랜잭션을 닫아 버립니다.

아직 트랜잭션 안에 남아 있음

DDL도 보류 상태라서 뒤의 판단에 따라 계속 진행하거나 취소할 수 있습니다.

ROLLBACK 후
이미 늦음

앞서 바꾼 잔액은 남고, ROLLBACK으로는 되돌릴 수 없습니다.

DDL과 DML을 함께 취소

CREATE TABLE과 그 안의 INSERT까지 같은 작업 단위로 사라집니다.

운영 의미
구조 변경 전에 DML 검토가 필수

DDL을 시험 삼아 실행해도, 그 전에 한 데이터 수정은 예상보다 먼저 확정될 수 있습니다.

스키마 변경도 안전한 실험 단위

문제 발견 시 테이블 생성 같은 구조 변경까지 포함해 한 번에 되돌릴 수 있습니다.