Oracle · MySQL
DDL이 경계가 됨구조 변경 명령이 나오면 현재 트랜잭션이 자동 커밋되어, 앞서 하던 DML이 먼저 확정됩니다.
CREATE TABLE temp_log (...); -- 이전 UPDATE 자동 COMMIT
같은 UPDATE에서 출발해도 Oracle·MySQL은 DDL이 나오면 이전 변경을 먼저 확정하고, PostgreSQL은 DDL까지 같은 트랜잭션 안에 남겨 둘 수 있습니다.
UPDATE accounts SET balance = balance - 100000 WHERE id = 1; -- 아직 COMMIT 안 함
CREATE TABLE을 실행하면 어떤 엔진은 경계를 닫고, 어떤 엔진은 아직 같은 작업 단위로 유지합니다.구조 변경 명령이 나오면 현재 트랜잭션이 자동 커밋되어, 앞서 하던 DML이 먼저 확정됩니다.
CREATE TABLE temp_log (...); -- 이전 UPDATE 자동 COMMIT
BEGIN 안에서 실행한 DDL도 같은 트랜잭션에 포함되어, 확인 후 한 번에 되돌릴 수 있습니다.
BEGIN; CREATE TABLE new_table (...); ROLLBACK;
CREATE, ALTER, DROP가 현재 트랜잭션을 닫아 버립니다.
DDL도 보류 상태라서 뒤의 판단에 따라 계속 진행하거나 취소할 수 있습니다.
앞서 바꾼 잔액은 남고, ROLLBACK으로는 되돌릴 수 없습니다.
CREATE TABLE과 그 안의 INSERT까지 같은 작업 단위로 사라집니다.
DDL을 시험 삼아 실행해도, 그 전에 한 데이터 수정은 예상보다 먼저 확정될 수 있습니다.
문제 발견 시 테이블 생성 같은 구조 변경까지 포함해 한 번에 되돌릴 수 있습니다.