프로그래밍백엔드 개발자

SQL에서 DDL과 DML 명령의 차이를 설명하고 예를 들어 권한 및 트랜잭션에 미치는 영향을 설명하십시오.

Hintsage AI 어시스턴트로 면접 통과

답변

DDL (데이터 정의 언어) — 데이터베이스 구조를 정의하기 위해 설계된 언어(테이블, 스키마, 인덱스의 생성, 수정, 삭제 등):

  • 예제 명령: CREATE TABLE, ALTER TABLE, DROP TABLE.
  • DDL 명령은 일반적으로 데이터베이스에 자동으로 커밋되므로(autocommit) 변경 사항을 되돌리기 어렵습니다.

DML (데이터 조작 언어) — 데이터베이스의 테이블 내용(행 추가, 수정, 삭제, 조회 등)을 조작하는 언어:

  • 예제 명령: INSERT, UPDATE, DELETE, SELECT.
  • DML 명령은 일반적으로 트랜잭션으로 감싸질 수 있으며 커밋 이전에 롤백이 가능합니다.

예를 들어, 다양한 사용자들이 DML 또는 DDL에 대한 권한이 다를 수 있습니다:

  • 일반 애플리케이션은 DDL을 사용하지 못하도록 자주 설정하여 구조를 우발적으로 변경하지 않도록 합니다;
  • DML은 데이터 작업을 위해 허용됩니다.

예:

-- 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 접근이 필요하다는 것을 잊어버렸고, 몇 시간의 조사와 긴급 역할 승격 끝에 릴리스가 실패했습니다.