정보처리기사/데이터베이스 활용

SQL 명령어 분류 (DDL / DML / DCL)

glorypang 2025. 10. 20. 23:31
728x90
반응형
SMALL

개념 요약

  • DDL (Data Definition Language): 스키마 정의/변경
  • DML (Data Manipulation Language): 데이터 조회/조작
  • DCL (Data Control Language): 권한 부여/회수

비교 표

구분  목적  대표 명령  트랜잭션 영향 (일반)
DDL 테이블·인덱스 등 객체 정의/변경 CREATE, ALTER, DROP, TRUNCATE, RENAME 많은 DB에서 자동 커밋
(rollback 불가인 경우 多)
DML 데이터 조회/삽입/수정/삭제 SELECT, INSERT, UPDATE, DELETE, MERGE 트랜잭션 내에서 COMMIT/ROLLBACK 가능
DCL 사용자/역할 권한 관리 GRANT, REVOKE (DB에 따라 DENY) 권한 변경은 보통 즉시 반영

💡 참고: 트랜잭션 제어는 TCL(Transaction Control Language)로 분류(COMMIT, ROLLBACK, SAVEPOINT)


DDL (정의어)

개념

스키마/객체의 생성·변경·삭제를 담당합니다.

주요 명령어

-- 테이블 생성
CREATE TABLE Member (
  member_id INT PRIMARY KEY,
  name      VARCHAR(50) NOT NULL
);

-- 컬럼 추가/변경
ALTER TABLE Member ADD phone VARCHAR(20);
ALTER TABLE Member ALTER COLUMN name VARCHAR(80);  -- DB마다 문법 차이

-- 테이블/인덱스 삭제
DROP TABLE Member;

-- 데이터만 전부 비우기(구조 유지, 보통 로그 최소화)
TRUNCATE TABLE Member;

특징

많은 DBMS에서 DDL은 암묵적 COMMIT을 유발하므로, 실행 후 롤백이 불가능한 경우가 많습니다.


DML (조작어)

개념

데이터의 조회/삽입/수정/삭제를 담당합니다.

주요 명령어

-- 조회
SELECT member_id, name FROM Member WHERE name LIKE 'a%';

-- 삽입
INSERT INTO Member (member_id, name, phone)
VALUES (100, 'a', '010-1111');

-- 수정
UPDATE Member SET phone = '010-2222' WHERE member_id = 100;

-- 삭제
DELETE FROM Member WHERE member_id = 100;

-- 병합(업서트)
MERGE INTO Member AS m
USING (SELECT 100 AS member_id, 'a' AS name) AS s
ON (m.member_id = s.member_id)
WHEN MATCHED THEN UPDATE SET name = s.name
WHEN NOT MATCHED THEN INSERT (member_id, name) VALUES (s.member_id, s.name);

트랜잭션 제어

필요시 명시적으로 트랜잭션을 제어할 수 있습니다:

BEGIN;           -- 또는 START TRANSACTION
  UPDATE Member SET name='b' WHERE member_id=100;
  -- 문제 있으면 ROLLBACK;
COMMIT;

DCL (제어어)

개념

사용자/역할에 권한 부여·회수를 담당합니다.

주요 명령어

-- 권한 부여
GRANT SELECT, INSERT ON Member TO user_a;
GRANT ALL PRIVILEGES ON SCHEMA public TO role_readwrite;

-- 권한 회수
REVOKE INSERT ON Member FROM user_a;

-- (일부 DB) 명시적 거부
-- DENY SELECT ON Member TO user_b;  -- SQL Server 등

WITH GRANT OPTION

WITH GRANT OPTION은 권한을 받은 사용자가 다른 사용자에게도 그 권한을 부여할 수 있도록 허용하는 옵션입니다.

기본 사용법

-- user_a에게 SELECT 권한을 부여하되, 다른 사람에게도 줄 수 있게 함
GRANT SELECT ON Member TO user_a WITH GRANT OPTION;

동작 예시

-- 1. 관리자가 user_a에게 권한 부여
GRANT SELECT ON Member TO user_a WITH GRANT OPTION;

-- 2. user_a가 user_b에게 권한 재부여 가능
-- (user_a로 로그인한 상태에서)
GRANT SELECT ON Member TO user_b;

-- 3. 원래 권한을 회수하면 연쇄적으로 회수됨
REVOKE SELECT ON Member FROM user_a;
-- → user_b의 권한도 자동으로 회수됨 (Cascade)

주의사항

  1. 보안 위험: 권한이 무분별하게 확산될 수 있으므로 신중하게 사용
  2. 연쇄 회수: 원본 권한을 회수하면 파생된 모든 권한도 회수됨
  3. 관리 복잡도: 누가 누구에게 권한을 줬는지 추적이 어려워질 수 있음

핵심 정리

DDL

  • 객체 구조를 정의/변경
  • 자동 커밋되는 경우가 많아 주의 필요

DML

  • 실제 데이터를 다룸
  • 트랜잭션 제어 가능

DCL

  • 보안과 권한을 관리
  • WITH GRANT OPTION으로 권한 위임 가능
728x90
반응형
LIST