정보처리기사/데이터베이스 활용
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)
주의사항
- 보안 위험: 권한이 무분별하게 확산될 수 있으므로 신중하게 사용
- 연쇄 회수: 원본 권한을 회수하면 파생된 모든 권한도 회수됨
- 관리 복잡도: 누가 누구에게 권한을 줬는지 추적이 어려워질 수 있음
핵심 정리
DDL
- 객체 구조를 정의/변경
- 자동 커밋되는 경우가 많아 주의 필요
DML
- 실제 데이터를 다룸
- 트랜잭션 제어 가능
DCL
- 보안과 권한을 관리
- WITH GRANT OPTION으로 권한 위임 가능
728x90
반응형
LIST