DDL (데이터 정의 언어) — 데이터베이스 구조를 정의하기 위해 설계된 언어(테이블, 스키마, 인덱스의 생성, 수정, 삭제 등):
CREATE TABLE, ALTER TABLE, DROP TABLE.DML (데이터 조작 언어) — 데이터베이스의 테이블 내용(행 추가, 수정, 삭제, 조회 등)을 조작하는 언어:
INSERT, UPDATE, DELETE, SELECT.예를 들어, 다양한 사용자들이 DML 또는 DDL에 대한 권한이 다를 수 있습니다:
-- DDL: 테이블 생성 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) ); -- DML: 데이터 삽입 INSERT INTO users (id, name) VALUES (1, 'Ivan');
"명시적 트랜잭션 내에서 DDL 명령(예: DROP TABLE)을 롤백할 수 있습니까?"
대부분의 DBMS(예: PostgreSQL, Oracle)는 DDL에 대한 트랜잭션을 지원하지만, 많은 경우 DDL 명령을 롤백할 수 없습니다. MySQL에서는 DDL 명령이 항상 즉시 커밋됩니다.
BEGIN; DROP TABLE employees; ROLLBACK;
대부분의 경우 테이블은 롤백에도 불구하고 영구적으로 삭제됩니다.
사례
DROP TABLE을 우발적으로 실행한 후 개발 환경에서 테이블을 잃어버림 — 이 명령은 트랜잭션 롤백에도 불구하고 되돌릴 수 없습니다.
사례
조직이 프로젝트에 관리 권한을 부여하여 버그로 인해 ALTER를 통해 데이터베이스 스키마가 대규모로 변경되었고, 이로 인해 서비스 중단과 주문 손실이 발생했습니다.
사례
신입 사원에게 DDL 권한을 거부했지만, 마이그레이션 배포 절차에 DDL 접근이 필요하다는 것을 잊어버렸고, 몇 시간의 조사와 긴급 역할 승격 끝에 릴리스가 실패했습니다.