DDL과 DCL
목차 20
23강이 설계 청사진(E-R), 24강이 키·무결성, 25강이 관계대수였다면, 26강은 그 테이블을 실제로 만들고(DDL) · 다스리는(DCL) SQL 명령어다. SQL 응용 단원의 거의 매회 출제처 — 점수밭은 SQL 4분류 · 제약 조건 6종 · DROP/TRUNCATE/DELETE 구분 · GRANT/REVOKE 문법.
핵심 암기: SQL 4분류 정(DDL)·조(DML)·제(DCL) + 트(TCL) · 제약 6종 NOT NULL·UNIQUE·PK·FK·CHECK·DEFAULT · 기본키 = NOT NULL+UNIQUE·1개 / UNIQUE = NULL 허용·여러 개 · GRANT=TO / REVOKE=FROM · DROP·TRUNCATE=DDL·ROLLBACK❌ / DELETE=DML·ROLLBACK✅
SQL 분류와 DDL 명령어
SQL 4분류 — DDL · DML · DCL · TCL ·SQL 응용·1순위·
[정의] SQL은 관계대수·관계해석을 기초로 한 데이터베이스 질의 언어. 용도에 따라 4종으로 나뉜다. 21강 정조제(정의·조작·제어)에 트랜잭션 제어어(TCL)를 더한 형태다.
[표] SQL 명령어 4분류 (공식 기본서 기준).
| 분류 | 풀이 | 명령어 |
|---|---|---|
| DDL(데이터 정의어) | 구조(스키마) 정의·변경·삭제 | CREATE · ALTER · DROP · RENAME · TRUNCATE |
| DML(데이터 조작어) | 데이터 조회·삽입·수정·삭제 | SELECT · INSERT · UPDATE · DELETE |
| DCL(데이터 제어어) | 권한 부여·회수 | GRANT · REVOKE |
| TCL(트랜잭션 제어어) | 트랜잭션 확정·취소 | COMMIT · ROLLBACK · SAVEPOINT |
🔑 암기 정(DDL)·조(DML)·제(DCL)·트(TCL). 21강 정조제의 '제'가 권한 제어(DCL), 거기에 트랜잭션 제어(TCL)가 갈라져 나온 구조.
⚠️ 함정 COMMIT·ROLLBACK 분류는 회색지대. 명령어 종류 표 기준은 TCL, 넓은 의미 DCL(제어 기능=보안·무결성·회복·병행수행)로 보면 DCL — 보기에 TCL 선지가 있으면 TCL, 없으면 DCL로 인정. / SELECT를 DDL로 ❌(→ DML) / TRUNCATE를 DML로 ❌(→ DDL·단골).
🎯 빈출 "DDL/DML/DCL 명령어가 아닌 것"·"트랜잭션 제어어에 해당하는 것" — SQL 응용 단원 거의 매회. 명령어 한 개를 엉뚱한 분류에 끼워 오답을 유도한다.
DDL 4명령어와 자동 COMMIT ·DDL 개요·
[정의] DDL(Data Definition Language)은 테이블·인덱스·뷰 같은 DB 객체의 구조를 다룬다. 실행 결과는 데이터 사전(시스템 카탈로그) 에 반영된다(22강).
[표] DDL 4대 명령어.
| 명령어 | 기능 | 한 줄 |
|---|---|---|
CREATE |
생성 | 테이블·인덱스·뷰·스키마 새로 만들기 |
ALTER |
변경 | 기존 테이블 구조 수정(컬럼 추가·수정·삭제) |
DROP |
삭제 | 테이블·인덱스·뷰 완전 삭제(구조+데이터) |
TRUNCATE |
초기화 | 데이터만 전체 삭제(구조는 유지) |
🔑 암기 DDL은 실행 즉시 자동 COMMIT → ROLLBACK 불가. 한 번 DROP·TRUNCATE 하면 트랜잭션으로 되돌릴 수 없다.
⚠️ 함정 "DDL은 ROLLBACK으로 되돌릴 수 있다" ❌(→ 자동 COMMIT이라 불가·★1순위) / "TRUNCATE는 구조까지 삭제" ❌(→ 데이터만, 구조는 유지·구조까지는 DROP).
🎯 빈출 자동 COMMIT 특성·DDL 명령어 분류. 거의 매회.
💡 보충 22강 데이터 사전 회수 — DDL을 실행하면 DBMS가 시스템 카탈로그를 자동 갱신한다(사용자가 직접 갱신 ❌).
테이블 생성 — CREATE TABLE과 제약 조건
CREATE TABLE 문법과 데이터 타입 ·CREATE TABLE·
[정의] 새 테이블을 만드는 명령어. 컬럼명·데이터 타입·제약 조건을 함께 정의한다.
CREATE TABLE employee (
emp_id VARCHAR(10) NOT NULL,
emp_name VARCHAR(50) NOT NULL,
dept_code VARCHAR(8),
salary INT DEFAULT 3500,
PRIMARY KEY (emp_id),
FOREIGN KEY (dept_code) REFERENCES department(dept_code)
);
[표] 주요 데이터 타입.
| 타입 | 설명 | 쓰임 |
|---|---|---|
CHAR(n) |
고정 길이 문자열 | 코드·번호 |
VARCHAR(n) |
가변 길이 문자열 | 이름·주소 |
INT |
정수 | 나이·수량 |
DECIMAL(p,s) |
소수점 숫자 | 금액·가격 |
DATE · DATETIME |
날짜 · 날짜+시간 | 등록일·주문시각 |
🔑 암기 컬럼 레벨(emp_id VARCHAR(10) NOT NULL)과 테이블 레벨(PRIMARY KEY (emp_id)) 두 방식으로 제약을 건다. 복합 키는 테이블 레벨로만 가능.
🎯 빈출 문법 빈칸·제약 조건 위치. 보통.
제약 조건 ① — NOT NULL · UNIQUE · CHECK · DEFAULT ·제약 조건·
[정의] 제약 조건(Constraint)은 잘못된 데이터 입력을 DB 레벨에서 막는 규칙. 24강 도메인 무결성을 SQL로 구현한 것이 CHECK다.
[표] 4종 제약.
| 제약 | 역할 | 핵심 |
|---|---|---|
| NOT NULL | NULL 입력 금지 | 반드시 값이 있어야 하는 컬럼 |
| UNIQUE | 중복 값 금지 | NULL은 허용(NULL끼리는 중복으로 안 봄)·여러 개 설정 가능 |
| CHECK | 값의 범위·조건 제한 | CHECK (salary > 0) · CHECK (rating BETWEEN 1 AND 5) — 도메인 무결성 |
| DEFAULT | 기본값 지정 | 값 미입력 시 자동 대입(DEFAULT 3500) |
🔑 암기 UNIQUE는 NULL 허용·테이블당 여러 개. 이 점이 PRIMARY KEY와 갈린다(PK는 NULL 금지·1개).
⚠️ 함정 "UNIQUE는 NULL을 허용하지 않는다" ❌(→ 허용) / "CHECK는 무결성과 무관" ❌(→ 도메인 무결성 구현).
🎯 빈출 UNIQUE의 NULL 허용·CHECK = 도메인 무결성. 보통.
제약 조건 ② — PRIMARY KEY · FOREIGN KEY · FK 4옵션 ·제약 조건·1순위·
[정의] PRIMARY KEY(기본키) = 각 행을 유일하게 식별(24강 개체 무결성). FOREIGN KEY(외래키) = 다른 테이블의 PK를 참조(24강 참조 무결성).
[표] 두 키 비교 (24강 슈후기대외·개참도 회수).
| 키 | NULL | 중복 | 개수 | 무결성 |
|---|---|---|---|---|
| PRIMARY KEY | ❌ | ❌ | 테이블당 1개(복합 키 가능) | 개체 무결성 |
| FOREIGN KEY | ✅ | ✅ | 여러 개 | 참조 무결성 |
[표] FK 위반 시 동작 — 참조 4옵션(24강 회수). ON DELETE · ON UPDATE 뒤에 붙인다.
| 옵션 | 동작 |
|---|---|
| RESTRICT | 참조 중이면 변경·삭제 거부(기본값) |
| CASCADE | 부모 삭제·수정 시 자식도 연쇄 삭제·수정 |
| SET NULL | 부모 삭제 시 자식 FK를 NULL로 |
| SET DEFAULT | 부모 삭제 시 자식 FK를 기본값으로 |
🔑 암기 기본키 = NOT NULL + UNIQUE 자동·테이블당 1개. 외래키 = 다른 PK 참조·NULL ✅·여러 개. FK 4옵션 = RESTRICT(기본)·CASCADE·SET NULL·SET DEFAULT.
⚠️ 함정 "기본키는 테이블당 여러 개 가능" ❌(→ 1개, 단 복합 키로 여러 컬럼 묶기는 가능·★1순위) / "외래키는 NULL 불가" ❌(→ 가능, NULL 금지는 기본키만) / "기본키에 NULL 가능" ❌.
🎯 빈출 PK 1개·PK = NOT NULL+UNIQUE·FK NULL 허용. 거의 매회.
💡 보충 기본키는 자동으로 인덱스가 생긴다. 24강 student·course·enrollment 예제의 FOREIGN KEY (학번) REFERENCES student(학번)가 바로 이 참조 무결성의 SQL 구현.
제약 조건 6종 총정리 ·제약 조건·1순위·
[표] CREATE TABLE 제약 조건 한눈 정리.
| 제약 | 역할 | NULL | 중복 | 개수 |
|---|---|---|---|---|
| NOT NULL | NULL 금지 | ❌ | ✅ | 여러 개 |
| UNIQUE | 중복 금지 | ✅ | ❌ | 여러 개 |
| PRIMARY KEY | 기본키(NOT NULL+UNIQUE) | ❌ | ❌ | 1개 |
| FOREIGN KEY | 외래키·참조 무결성 | ✅ | ✅ | 여러 개 |
| CHECK | 값 범위·조건 | – | – | 여러 개 |
| DEFAULT | 기본값 | – | – | 여러 개 |
🔑 암기 세 줄로 압축 — ① PRIMARY KEY = NOT NULL + UNIQUE 동시 ② UNIQUE는 NULL 허용(PK와의 차이) ③ PK만 테이블당 1개, 나머지는 여러 개.
⚠️ 함정 PK와 UNIQUE의 NULL·개수 속성을 뒤바꿔 출제. "UNIQUE는 1개만" ❌ / "PK는 NULL 허용" ❌.
🎯 빈출 6종 속성 매칭. 거의 매회.
테이블 변경·삭제와 기타 DDL
ALTER TABLE — 구조 변경 ·ALTER·
[정의] 기존 테이블의 구조를 바꾸는 명령어. 컬럼 추가·수정·삭제 3가지가 핵심.
ALTER TABLE employee ADD email VARCHAR(100); -- 컬럼 추가
ALTER TABLE employee MODIFY emp_name VARCHAR(100); -- 컬럼 수정(MySQL)
ALTER TABLE employee DROP COLUMN fax_number; -- 컬럼 삭제
🔑 암기 ADD(추가) · MODIFY 또는 ALTER COLUMN(수정) · DROP COLUMN(삭제). 제약 조건 추가는 ADD CONSTRAINT chk_salary CHECK (...).
⚠️ 함정 컬럼 삭제는 DROP COLUMN(테이블 자체 삭제 DROP TABLE과 구분) / 수정 키워드는 DBMS별로 MODIFY(MySQL)·ALTER COLUMN(SQL Server)으로 갈림.
🎯 빈출 ADD/MODIFY/DROP COLUMN 용도 구분. 보통.
DROP · TRUNCATE · DELETE 구분 ·삭제 명령·1순위·
[정의] "지우는" 명령어 3종. 분류와 ROLLBACK 가능 여부가 시험 핵심 — DROP·TRUNCATE는 DDL, DELETE만 DML이다.
[표] 3종 비교.
| 구분 | DROP | TRUNCATE | DELETE |
|---|---|---|---|
| 분류 | DDL | DDL | DML |
| 삭제 대상 | 구조 + 데이터 | 데이터만(구조 유지) | 데이터만(구조 유지) |
| WHERE 조건 | 불가 | 불가 | 가능 |
| ROLLBACK | 불가 | 불가 | 가능 |
| 속도 | 빠름 | 가장 빠름 | 느림(행마다 로그) |
🔑 암기 구조까지 → DROP / 데이터 전체 초기화 → TRUNCATE / 조건부·되돌리기 가능 → DELETE. DELETE만 DML·ROLLBACK ✅·WHERE ✅.
⚠️ 함정 "DELETE는 DDL" ❌(→ DML·★1순위) / "TRUNCATE는 ROLLBACK 가능" ❌(→ DDL이라 불가) / "DROP 실행 후 ROLLBACK으로 복구" ❌(→ 자동 COMMIT이라 불가).
🎯 빈출 DROP↔TRUNCATE↔DELETE 자리 바꿔치기. 거의 매회.
CREATE INDEX · CREATE VIEW ·기타 DDL·
[정의] CREATE INDEX = 검색 속도를 높이는 인덱스 생성. CREATE VIEW = 하나 이상의 테이블 기반 가상 테이블(뷰) 생성.
CREATE INDEX idx_emp_name ON employee(emp_name);
CREATE VIEW dev_employees AS
SELECT emp_id, emp_name FROM employee WHERE dept_code = 'DEV';
[표] 두 객체의 시험 포인트.
| 객체 | 핵심 | 함정 |
|---|---|---|
| INDEX | SELECT↑ / INSERT·UPDATE·DELETE↓ · PK는 자동 인덱스 | "인덱스 많을수록 항상 빠름" ❌ |
| VIEW | 가상 테이블·물리 저장 ❌·데이터 보안·쿼리 단순화 | "뷰는 독자 인덱스를 가진다" ❌(★1순위) |
🔑 암기 뷰는 가상 테이블 — 자체 인덱스 ❌(기본 테이블 인덱스를 빌려 씀). 인덱스는 SELECT는 빠르게, 변경(INSERT·UPDATE·DELETE)은 느리게.
⚠️ 함정 "뷰가 디스크에 데이터를 물리적으로 저장" ❌(→ 정의문만 보관·조회 시 재실행) / "뷰는 자체 인덱스 보유" ❌(반복 출제 단골 선지).
🎯 빈출 뷰의 특징(독자 인덱스 ❌)·인덱스 트레이드오프. 거의 매회.
💡 보충 인덱스 자료구조(B+Tree 등)·뷰의 4대 특성은 30강 고급 데이터베이스에서 본격. 26강은 생성 문법까지만.
DCL — 권한 제어
DCL 개요와 GRANT — 권한 부여 ·DCL·1순위·
[정의] DCL(Data Control Language)은 DB의 보안·권한을 제어. 주로 DBA가 사용한다(22강). GRANT = 사용자에게 권한 부여.
GRANT 권한 ON 테이블 TO 사용자 [WITH GRANT OPTION];
GRANT SELECT, INSERT ON employee TO user_dev; -- 조회·삽입 권한
GRANT ALL ON employee TO user_admin WITH GRANT OPTION;
[표] 주요 권한·옵션.
| 키워드 | 의미 |
|---|---|
SELECT · INSERT · UPDATE · DELETE |
작업별 권한 |
ALL (= ALL PRIVILEGES) |
모든 권한 |
PUBLIC |
모든 사용자에게 부여 |
WITH GRANT OPTION |
받은 권한을 다른 사용자에게 재부여 가능 |
🔑 암기 GRANT는 TO(~에게). 문법 = GRANT 권한 ON 테이블 TO 사용자.
⚠️ 함정 "GRANT ... FROM ..." ❌(→ TO·GRANT는 부여라 '~에게'·★1순위).
🎯 빈출 GRANT 문법 빈칸(TO)·WITH GRANT OPTION 의미. 거의 매회.
💡 보충 WITH GRANT OPTION으로 재부여한 권한은, 부여자의 권한을 회수하면 함께 회수된다(다음 카드 CASCADE와 연결).
REVOKE — 권한 회수 ·DCL·1순위·
[정의] REVOKE = 사용자의 권한 회수. CASCADE·RESTRICT 옵션으로 하위 권한 처리 방식을 정한다.
REVOKE 권한 ON 테이블 FROM 사용자 [CASCADE | RESTRICT];
REVOKE SELECT ON employee FROM user_dev;
REVOKE ALL ON employee FROM user_admin CASCADE; -- 하위 권한도 연쇄 회수
[표] CASCADE vs RESTRICT.
| 옵션 | 동작 |
|---|---|
| CASCADE | 그 사용자가 재부여한 하위 권한도 함께 연쇄 회수 |
| RESTRICT | 재부여한 권한이 있으면 회수 거부(오류) |
🔑 암기 REVOKE는 FROM(~로부터). CASCADE = 연쇄 회수 / RESTRICT = 하위 있으면 거부.
⚠️ 함정 "REVOKE ... TO ..." ❌(→ FROM) / "CASCADE는 하위 권한 유지" ❌(→ 연쇄 회수) / "RESTRICT = CASCADE" ❌(→ 정반대·RESTRICT는 거부).
🎯 빈출 REVOKE FROM·CASCADE 의미. 거의 매회.
GRANT vs REVOKE 총정리 ·DCL·1순위·
[표] 권한 제어 두 명령어 대비.
| 구분 | GRANT | REVOKE |
|---|---|---|
| 역할 | 권한 부여 | 권한 회수 |
| 전치사 | TO(~에게) | FROM(~로부터) |
| 특수 옵션 | WITH GRANT OPTION |
CASCADE / RESTRICT |
| PUBLIC | 모두에게 부여 | 모두에게서 회수 |
GRANT 권한 ON 테이블 TO 사용자 [WITH GRANT OPTION];
REVOKE 권한 ON 테이블 FROM 사용자 [CASCADE | RESTRICT];
🔑 암기 GRANT는 TO, REVOKE는 FROM. 이 한 줄이 26강 DCL 출제분의 핵심.
⚠️ 함정 전치사 뒤바꿈(GRANT FROM / REVOKE TO) — 매회 등장하는 1순위 함정.
🎯 빈출 TO/FROM 빈칸 채우기. 거의 매회.
TCL — 트랜잭션 제어
COMMIT · ROLLBACK · SAVEPOINT ·TCL·
[정의] TCL(Transaction Control Language)은 트랜잭션의 변경 사항을 확정(COMMIT) 하거나 취소(ROLLBACK) 한다. SAVEPOINT는 부분 롤백용 저장점.
[표] 트랜잭션 제어 3종.
| 명령어 | 역할 | 핵심 |
|---|---|---|
| COMMIT | 변경 사항 영구 저장 | COMMIT 이후 ROLLBACK 불가 |
| ROLLBACK | 변경 사항 취소·복구 | COMMIT 이전 변경만 되돌림 |
| SAVEPOINT | 저장점 설정(부분 롤백) | ROLLBACK TO SAVEPOINT 저장점명 |
[흐름] 트랜잭션 진행.
트랜잭션 시작
│
▼ DML 실행(INSERT·UPDATE·DELETE)
│
├─ SAVEPOINT sp1 설정 ── 부분 롤백 지점
│
▼ DML 실행
│
├─ 오류 → ROLLBACK (또는 ROLLBACK TO sp1)
└─ 성공 → COMMIT (영구 저장)
🔑 암기 COMMIT = 확정 / ROLLBACK = 취소 / SAVEPOINT = 부분 롤백 지점. DDL은 자동 COMMIT이라 ROLLBACK 불가.
⚠️ 함정 "COMMIT 이후에도 ROLLBACK 가능" ❌(→ 불가) / "DDL은 ROLLBACK 가능" ❌(→ 자동 COMMIT·불가) / 분류 — 명령어 종류 표 기준 COMMIT·ROLLBACK은 TCL(단 넓은 의미 DCL로 보는 교재도 있음·1번 카드 회색지대 참조).
🎯 빈출 COMMIT/ROLLBACK 특성·ROLLBACK 불가 상황(DDL 실행 후·COMMIT 후). 보통.
💡 보충 트랜잭션의 ACID 특성·로그 기반 회복(REDO/UNDO)은 29강 트랜잭션·회복·병행 제어에서 본격. 26강은 명령어 문법까지만.
기출 다지기
[기출 1 출제] SQL의 DDL(Data Definition Language) 명령어가 아닌 것은?
- ① CREATE
- ② ALTER
- ③ DROP
- ④ SELECT
정답 및 해설 보기
정답 ④ SELECT
DDL = CREATE · ALTER · DROP · RENAME · TRUNCATE. 구조를 정의하는 명령어다.
| 선지 | 분류 | 판정 |
|---|---|---|
| ① CREATE | DDL | 맞음 |
| ② ALTER | DDL | 맞음 |
| ③ DROP | DDL | 맞음 |
| ④ SELECT | DML(데이터 조작어) | 정답 |
🔑 SELECT는 데이터를 조회하는 DML — 구조를 정의하는 DDL이 아니다.
[기출 2 출제] 다음 SQL의 ( ) 안에 들어갈 키워드로 옳은 것은?
GRANT SELECT ON employee ( ) user_hong;
- ① FROM
- ② INTO
- ③ TO
- ④ FOR
정답 및 해설 보기
정답 ③ TO
GRANT 문법 = GRANT 권한 ON 테이블 TO 사용자.
| 선지 | 판정 |
|---|---|
| ① FROM | REVOKE에서 사용 → ❌ |
| ② INTO | INSERT INTO에서 사용 → ❌ |
| ③ TO | GRANT(부여)는 '~에게' → 정답 |
| ④ FOR | SQL 권한 문법에 없음 → ❌ |
🔑 GRANT는 TO, REVOKE는 FROM — 매회 나오는 1순위 함정.
[기출 3 출제] 뷰(View)의 특징으로 옳지 않은 것은?
- ① 뷰는 자체적으로 인덱스를 가진다.
- ② 데이터 보안에 유용하다.
- ③ 논리적 독립성을 제공한다.
- ④ 복잡한 쿼리를 단순화한다.
정답 및 해설 보기
정답 ①
| 선지 | 판정 |
|---|---|
| ① 자체 인덱스 보유 | 정답(틀림) — 뷰는 가상 테이블이라 독자 인덱스 ❌ |
| ② 데이터 보안 | 옳음(민감 컬럼 숨기기) |
| ③ 논리적 독립성 | 옳음 |
| ④ 쿼리 단순화 | 옳음 |
🔑 "뷰는 자체 인덱스를 가진다" → 항상 틀린 선지(반복 출제). 뷰는 기본 테이블의 인덱스를 빌려 쓴다.
[기출 4 출제] PRIMARY KEY에 대한 설명으로 옳지 않은 것은?
- ① PRIMARY KEY로 지정된 속성은 NULL 값을 가질 수 없다.
- ② PRIMARY KEY는 UNIQUE와 NOT NULL을 모두 만족한다.
- ③ 하나의 테이블에 PRIMARY KEY는 여러 개 설정할 수 있다.
- ④ 두 개 이상의 속성으로 복합 기본키를 구성할 수 있다.
정답 및 해설 보기
정답 ③
| 선지 | 판정 |
|---|---|
| ① NULL 불가 | 옳음(개체 무결성) |
| ② UNIQUE + NOT NULL | 옳음 |
| ③ 테이블당 여러 개 | 정답(틀림) — PK는 테이블당 1개만 |
| ④ 복합 기본키 | 옳음(여러 컬럼 묶기) |
🔑 PRIMARY KEY = 테이블당 1개(복합 키로 여러 컬럼은 가능) / UNIQUE = 여러 개 가능.
[기출 5 출제] DROP TABLE과 DELETE의 차이로 옳지 않은 것은?
- ① DROP TABLE은 테이블 구조와 데이터를 모두 삭제한다.
- ② DELETE는 WHERE 조건으로 특정 행만 삭제할 수 있다.
- ③ DROP TABLE 실행 후 ROLLBACK으로 되돌릴 수 있다.
- ④ DELETE는 DML, DROP은 DDL 명령어다.
정답 및 해설 보기
정답 ③
| 선지 | 판정 |
|---|---|
| ① 구조+데이터 삭제 | 옳음 |
| ② WHERE 조건부 삭제 | 옳음 |
| ③ DROP 후 ROLLBACK 가능 | 정답(틀림) — DDL은 자동 COMMIT → ROLLBACK 불가 |
| ④ DELETE=DML / DROP=DDL | 옳음 |
🔑 DDL(CREATE·ALTER·DROP·TRUNCATE)은 자동 COMMIT이라 ROLLBACK 불가. DELETE만 DML·ROLLBACK ✅.
[기출 6 출제] 다음 SQL에 대한 설명으로 옳은 것은?
REVOKE SELECT ON employee FROM user_a CASCADE;
- ① user_a에게 SELECT 권한을 부여한다.
- ② user_a가 다른 사용자에게 부여한 권한은 유지된다.
- ③ user_a의 권한과 user_a가 부여한 하위 권한도 모두 회수된다.
- ④ RESTRICT 옵션과 동일한 효과를 가진다.
정답 및 해설 보기
정답 ③
REVOKE ... FROM user_a CASCADE = user_a로부터 회수 + 하위 권한 연쇄 회수.
| 선지 | 판정 |
|---|---|
| ① 권한 부여 | GRANT의 역할 → ❌ |
| ② 하위 권한 유지 | CASCADE는 연쇄 회수 → ❌ |
| ③ 하위 권한도 모두 회수 | 정답 — CASCADE의 정확한 의미 |
| ④ RESTRICT와 동일 | RESTRICT는 하위 있으면 회수 거부 → 정반대 → ❌ |
🔑 CASCADE = 연쇄 회수 / RESTRICT = 하위 있으면 거부.
[기출 7 출제] 트랜잭션 제어어(TCL)에 해당하는 명령어로만 묶인 것은?
- ① GRANT, REVOKE
- ② CREATE, ALTER, DROP
- ③ COMMIT, ROLLBACK, SAVEPOINT
- ④ SELECT, INSERT, UPDATE
정답 및 해설 보기
정답 ③ COMMIT, ROLLBACK, SAVEPOINT
| 선지 | 분류 | 판정 |
|---|---|---|
| ① GRANT, REVOKE | DCL(권한 제어) | ❌ |
| ② CREATE, ALTER, DROP | DDL(정의) | ❌ |
| ③ COMMIT, ROLLBACK, SAVEPOINT | TCL(트랜잭션 제어) | 정답 |
| ④ SELECT, INSERT, UPDATE | DML(조작) | ❌ |
🔑 보기에 DCL과 TCL이 함께 있으면 COMMIT·ROLLBACK은 TCL. 단 TCL 선지가 없고 넓은 의미 DCL로 출제되면 DCL로 인정(회색지대).
[기출 8 출제] 테이블 제약 조건에 대한 설명으로 옳지 않은 것은?
- ① UNIQUE 제약 컬럼은 NULL 값을 허용한다.
- ② FOREIGN KEY 컬럼은 NULL 값을 가질 수 없다.
- ③ CHECK는 컬럼 값의 범위를 제한한다.
- ④ DEFAULT는 값 미입력 시 기본값을 대입한다.
정답 및 해설 보기
정답 ②
| 선지 | 판정 |
|---|---|
| ① UNIQUE는 NULL 허용 | 옳음 |
| ② FOREIGN KEY는 NULL 불가 | 정답(틀림) — 외래키는 NULL 가능(금지는 기본키만) |
| ③ CHECK 값 범위 제한 | 옳음(도메인 무결성) |
| ④ DEFAULT 기본값 대입 | 옳음 |
🔑 NULL을 금지하는 키는 기본키만. 외래키는 '관계 미결정'을 NULL로 표현한다(24강).
한 장 요약
| 영역 | 핵심 | 암기팁 |
|---|---|---|
| SQL 4분류 | DDL(정의)·DML(조작)·DCL(제어)·TCL(트랜잭션) | 정·조·제·트 |
| DDL 4종 | CREATE·ALTER·DROP·TRUNCATE · 자동 COMMIT | DDL은 ROLLBACK ❌ |
| 제약 6종 | NOT NULL·UNIQUE·PK·FK·CHECK·DEFAULT | PK=NN+UQ·1개 / UNIQUE=NULL 허용·여러 개 |
| PK vs FK | PK = NULL❌·1개 / FK = NULL✅·여러 개·다른 PK 참조 | NULL 금지는 기본키만 |
| FK 4옵션 | RESTRICT(기본)·CASCADE·SET NULL·SET DEFAULT | 부모 삭제 시 자식 처리 |
| 삭제 3종 | DROP(구조+데이터)·TRUNCATE(데이터)·DELETE(조건부) | DELETE만 DML·ROLLBACK✅·WHERE✅ |
| INDEX·VIEW | INDEX: SELECT↑변경↓ / VIEW: 가상·독자 인덱스❌ | 뷰 자체 인덱스 ❌(1순위) |
| GRANT/REVOKE | GRANT=부여·TO / REVOKE=회수·FROM | GRANT는 TO, REVOKE는 FROM |
| 권한 옵션 | WITH GRANT OPTION(재부여) / CASCADE(연쇄 회수)·RESTRICT(거부) | CASCADE=연쇄 / RESTRICT=거부 |
| TCL | COMMIT(확정)·ROLLBACK(취소)·SAVEPOINT(부분) | DDL 자동 COMMIT → ROLLBACK ❌ |
🎯 합격 한 끗: 26강은 세 무기면 출제분의 80%가 즉답이다 — ① SQL 4분류(SELECT=DML·TRUNCATE=DDL·COMMIT/ROLLBACK=TCL) ② DROP/TRUNCATE/DELETE(DELETE만 ROLLBACK 가능) ③ GRANT는 TO·REVOKE는 FROM. 여기에 제약 6종 함정(UNIQUE NULL 허용·PK 1개·FK NULL 가능)과 뷰 독자 인덱스 ❌만 더 얹으면 끝.
