2026 SQLD 필기 2과목 3장 3~4절 | DDL·DCL·제약조건·권한 — 핵심 이론
데이터위자드 ·
필기 · 핵심 이론
DDL은 데이터베이스 객체 구조를 정의하고 DCL은 접근 권한을 제어합니다. 기본키·외래키·UNIQUE·CHECK가 각각 어떤 오류를 막는지 구분하고, DELETE·TRUNCATE·DROP의 차이는 DBMS별 트랜잭션 규칙까지 함께 확인합니다.
CREATE·ALTER·DROP · PK·UNIQUE·NOT NULL · CHECK와 NULL · DELETE·TRUNCATE·DROP · GRANT·REVOKE와 ROLE
1. CREATE·ALTER·DROP
CREATE는 객체 생성, ALTER는 구조 변경, DROP은 객체 제거입니다. 행 값을 바꾸는 UPDATE와 열 정의를 바꾸는 ALTER는 다른 범주입니다. 스키마 변경은 의존 객체·권한·데이터 보존에 영향을 줄 수 있으므로 문장 의미를 정확히 읽어야 합니다.
DROP TABLE은 행 삭제만 하는 DELETE보다 범위가 큽니다. 복구 가능 여부와 암시적 커밋은 DBMS·설정에 따라 다르므로 모든 제품에서 동일하다고 단정하지 않습니다.
ALTER TABLE은 테이블의 구조나 제약을 변경하는 DDL이다.
예제로 적용하기
테이블에 NOT NULL 제약을 추가하는 명령 범주는?
풀이와 판단 과정
결론: DDL
테이블 제약 정의를 바꾸는 구조 변경이므로 DDL입니다.
2. PK·UNIQUE·NOT NULL
PRIMARY KEY는 행 식별을 위한 유일성과 NULL 금지를 결합합니다. UNIQUE는 중복을 제한하고 NULL 처리 세부 규칙은 DBMS별로 다를 수 있습니다. NOT NULL은 값의 존재를 강제하지만 값 자체가 업무상 유효한지는 보장하지 않습니다.
전화번호가 존재해야 한다는 규칙과 전화번호가 유일해야 한다는 규칙을 나누어 판단하세요. 복합 기본키는 각 컬럼 하나가 아니라 조합 전체의 유일성을 뜻합니다.
복합 기본키는 구성 컬럼 조합이 유일해야 한다.
예제로 적용하기
PK가 (학생번호,과목번호)일 때 학생번호 1이 여러 행에 반복될 수 있는가?
풀이와 판단 과정
결론: 다른 과목과의 조합이면 가능하다.
조합이 유일하면 같은 학생이 여러 과목을 수강하는 행을 저장할 수 있습니다.
3. CHECK와 NULL
CHECK는 행 값의 조건을 검증합니다. SQL의 CHECK는 보통 FALSE를 거부하고 UNKNOWN은 허용하므로 CHECK(price>0)만으로 NULL을 반드시 막는 것은 아닙니다. 필수 값이면 NOT NULL을 함께 정합니다.
범위·상태 코드 등 값 제약과 외래키의 참조 제약을 구분하세요. CHECK 표현식에서 다른 테이블을 조회하는 서브쿼리 허용 여부 등은 제품별 제한이 있으므로 참조 무결성을 대신할 수 있다고 일반화하지 않습니다.
CHECK(price>0)와 NOT NULL은 서로 다른 조건을 담당한다.
예제로 적용하기
price를 반드시 양수로 저장하려면 기본적인 제약 조합은?
풀이와 판단 과정
결론: NOT NULL과 CHECK(price>0)
값의 존재는 NOT NULL, 양수 범위는 CHECK로 나누어 강제합니다.
4. DELETE·TRUNCATE·DROP
DELETE는 조건을 줄 수 있는 행 삭제, TRUNCATE는 테이블의 전체 행을 비우는 구조적 명령, DROP은 테이블 정의 제거입니다. TRUNCATE의 롤백·트리거·ID 초기화 규칙은 DBMS마다 다릅니다.
Oracle에서 TRUNCATE는 DDL의 암시적 커밋 규칙을 고려해야 하고 PostgreSQL에서는 명시적 트랜잭션에서 롤백할 수 있습니다. 따라서 TRUNCATE는 모든 DB에서 취소 불가라는 문장은 부정확합니다.
TRUNCATE의 롤백 가능 여부는 DBMS의 트랜잭션 규칙을 확인해야 한다.
예제로 적용하기
조건에 맞는 일부 고객 행만 지우는 명령은?
풀이와 판단 과정
결론: DELETE FROM customers WHERE ...
부분 행 삭제는 WHERE가 있는 DELETE로 수행합니다.
5. GRANT·REVOKE와 ROLE
GRANT는 권한 부여, REVOKE는 권한 회수입니다. ROLE은 여러 권한을 묶어 관리할 수 있습니다. SELECT 권한이 있다고 UPDATE까지 자동 허용되는 것은 아니며 직접 부여와 역할을 통한 권한은 구별해야 합니다.
한 경로의 권한을 회수해도 다른 역할이나 직접 부여로 같은 권한이 남을 수 있습니다. WITH GRANT OPTION 같은 재부여 옵션과 회수 파급은 제품별 규칙을 확인합니다. 최소한의 필요한 권한을 주는 원칙이 관리에 유리합니다.
권한은 직접 부여와 역할 등 여러 경로로 존재할 수 있다.
예제로 적용하기
직접 SELECT 권한과 역할의 SELECT 권한을 모두 가진 사용자의 직접 권한만 회수하면?
풀이와 판단 과정
결론: 역할의 권한 때문에 여전히 조회할 수 있다.
다른 부여 경로인 역할에 권한이 남아 있으므로 직접 권한 회수만으로 전체 접근이 차단되지는 않습니다.
한눈에 비교하기
| 분류 | 대표 명령 | 담당 |
|---|---|---|
| DDL | CREATE·ALTER·DROP | 객체 정의 |
| DML | INSERT·UPDATE·DELETE | 행 데이터 |
| TCL | COMMIT·ROLLBACK | 확정·취소 |
| DCL | GRANT·REVOKE | 권한 |
| 제약 | PK·FK·CHECK | 무결성 검증 |
순서대로 풀어 보는 예제
주문 테이블을 만들 때 주문번호 PK, 고객번호 FK, 금액 NOT NULL·CHECK(amount>=0)를 각각 정의할 수 있습니다. PK는 주문 식별, FK는 존재하는 고객 참조, CHECK는 금액 범위, NOT NULL은 금액 입력을 강제합니다.
조회 전용 운영자에게는 필요한 테이블의 SELECT 권한을 부여하고 데이터 수정 권한을 자동으로 포함하지 않습니다. 제약 정의와 권한 정의는 서로 다른 오류를 막는 장치이므로 한 가지로 대체할 수 없습니다.
CREATE TABLE orders_example (
id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL,
amount NUMERIC(12,2) NOT NULL CHECK(amount>=0),
FOREIGN KEY(customer_id) REFERENCES customers(id)
);
-- 제품의 권한 문법 확인 후 실행
GRANT SELECT ON orders_example TO report_reader;헷갈리는 문장 바로잡기
CREATE·ALTER·DROP
잘못된 판단 UPDATE는 컬럼 자료형을 정의하는 DDL이다.
올바른 판단: ALTER TABLE은 테이블의 구조나 제약을 변경하는 DDL이다.
PK·UNIQUE·NOT NULL
잘못된 판단 복합 기본키의 각 컬럼은 반드시 각각 유일하다.
올바른 판단: 복합 기본키는 구성 컬럼 조합이 유일해야 한다.
CHECK와 NULL
잘못된 판단 CHECK(price>0)은 어떤 경우에도 NULL을 반드시 거부한다.
올바른 판단: CHECK(price>0)와 NOT NULL은 서로 다른 조건을 담당한다.
DELETE·TRUNCATE·DROP
잘못된 판단 TRUNCATE는 모든 DB에서 반드시 취소 불가다.
올바른 판단: TRUNCATE의 롤백 가능 여부는 DBMS의 트랜잭션 규칙을 확인해야 한다.
GRANT·REVOKE와 ROLE
잘못된 판단 SELECT 권한이면 UPDATE도 언제나 허용된다.
올바른 판단: 권한은 직접 부여와 역할 등 여러 경로로 존재할 수 있다.
이론을 정리했다면 같은 절의 객관식 문제에서 조건과 예외를 확인하세요. 정답을 고른 뒤에는 틀린 선택지가 왜 성립하지 않는지도 설명해 보세요.
핵심 개념 확인 — 객관식 5문제
설명을 읽은 뒤 아래 다섯 문항을 풀어 보세요. 정답을 고르고 틀린 선택지의 오류도 설명할 수 있으면 이 단원의 기준을 이해한 것입니다.
문제 1
DDL·DCL·제약조건·권한에서 CREATE·ALTER·DROP에 대한 설명으로 옳은 것은?
- ① ALTER TABLE은 테이블의 구조나 제약을 변경하는 DDL이다.
- ② CREATE는 조회 결과만 정렬한다.
- ③ DROP TABLE은 항상 빈 행 하나를 남긴다.
- ④ UPDATE는 컬럼 자료형을 정의하는 DDL이다.
정답과 해설 보기
정답 ①
CREATE는 객체 생성, ALTER는 구조 변경, DROP은 객체 제거입니다. 행 값을 바꾸는 UPDATE와 열 정의를 바꾸는 ALTER는 다른 범주입니다. 스키마 변경은 의존 객체·권한·데이터 보존에 영향을 줄 수 있으므로 문장 의미를 정확히 읽어야 합니다. DROP TABLE은 행 삭제만 하는 DELETE보다 범위가 큽니다. 복구 가능 여부와 암시적 커밋은 DBMS·설정에 따라 다르므로 모든 제품에서 동일하다고 단정하지 않습니다.
ALTER TABLE은 테이블의 구조나 제약을 변경하는 DDL이다.
문제 2
DDL·DCL·제약조건·권한에서 PK·UNIQUE·NOT NULL에 대한 설명으로 옳은 것은?
- ① 복합 기본키는 구성 컬럼 조합이 유일해야 한다.
- ② NOT NULL이면 값이 항상 업무상 정확하다.
- ③ 복합 기본키의 각 컬럼은 반드시 각각 유일하다.
- ④ 기본키에는 NULL을 자유롭게 저장한다.
정답과 해설 보기
정답 ①
PRIMARY KEY는 행 식별을 위한 유일성과 NULL 금지를 결합합니다. UNIQUE는 중복을 제한하고 NULL 처리 세부 규칙은 DBMS별로 다를 수 있습니다. NOT NULL은 값의 존재를 강제하지만 값 자체가 업무상 유효한지는 보장하지 않습니다. 전화번호가 존재해야 한다는 규칙과 전화번호가 유일해야 한다는 규칙을 나누어 판단하세요. 복합 기본키는 각 컬럼 하나가 아니라 조합 전체의 유일성을 뜻합니다.
복합 기본키는 구성 컬럼 조합이 유일해야 한다.
문제 3
DDL·DCL·제약조건·권한에서 CHECK와 NULL에 대한 설명으로 옳은 것은?
- ① CHECK(price>0)와 NOT NULL은 서로 다른 조건을 담당한다.
- ② CHECK는 원본 행을 자동 정렬한다.
- ③ CHECK(price>0)은 어떤 경우에도 NULL을 반드시 거부한다.
- ④ 외래키가 있으면 모든 숫자 범위도 자동 검증된다.
정답과 해설 보기
정답 ①
CHECK는 행 값의 조건을 검증합니다. SQL의 CHECK는 보통 FALSE를 거부하고 UNKNOWN은 허용하므로 CHECK(price>0)만으로 NULL을 반드시 막는 것은 아닙니다. 필수 값이면 NOT NULL을 함께 정합니다. 범위·상태 코드 등 값 제약과 외래키의 참조 제약을 구분하세요. CHECK 표현식에서 다른 테이블을 조회하는 서브쿼리 허용 여부 등은 제품별 제한이 있으므로 참조 무결성을 대신할 수 있다고 일반화하지 않습니다.
CHECK(price>0)와 NOT NULL은 서로 다른 조건을 담당한다.
문제 4
DDL·DCL·제약조건·권한에서 DELETE·TRUNCATE·DROP에 대한 설명으로 옳은 것은?
- ① DROP은 행만 비우고 정의를 항상 유지한다.
- ② TRUNCATE는 모든 DB에서 반드시 취소 불가다.
- ③ TRUNCATE의 롤백 가능 여부는 DBMS의 트랜잭션 규칙을 확인해야 한다.
- ④ DELETE는 WHERE를 사용할 수 없다.
정답과 해설 보기
정답 ③
DELETE는 조건을 줄 수 있는 행 삭제, TRUNCATE는 테이블의 전체 행을 비우는 구조적 명령, DROP은 테이블 정의 제거입니다. TRUNCATE의 롤백·트리거·ID 초기화 규칙은 DBMS마다 다릅니다. Oracle에서 TRUNCATE는 DDL의 암시적 커밋 규칙을 고려해야 하고 PostgreSQL에서는 명시적 트랜잭션에서 롤백할 수 있습니다. 따라서 TRUNCATE는 모든 DB에서 취소 불가라는 문장은 부정확합니다.
TRUNCATE의 롤백 가능 여부는 DBMS의 트랜잭션 규칙을 확인해야 한다.
문제 5
DDL·DCL·제약조건·권한에서 GRANT·REVOKE와 ROLE에 대한 설명으로 옳은 것은?
- ① REVOKE는 테이블의 모든 행을 삭제한다.
- ② ROLE은 반드시 사용자 한 명만 포함한다.
- ③ 권한은 직접 부여와 역할 등 여러 경로로 존재할 수 있다.
- ④ SELECT 권한이면 UPDATE도 언제나 허용된다.
정답과 해설 보기
정답 ③
GRANT는 권한 부여, REVOKE는 권한 회수입니다. ROLE은 여러 권한을 묶어 관리할 수 있습니다. SELECT 권한이 있다고 UPDATE까지 자동 허용되는 것은 아니며 직접 부여와 역할을 통한 권한은 구별해야 합니다. 한 경로의 권한을 회수해도 다른 역할이나 직접 부여로 같은 권한이 남을 수 있습니다. WITH GRANT OPTION 같은 재부여 옵션과 회수 파급은 제품별 규칙을 확인합니다. 최소한의 필요한 권한을 주는 원칙이 관리에 유리합니다.
권한은 직접 부여와 역할 등 여러 경로로 존재할 수 있다.
범위 확인
2026년 학습 범위를 기준으로 구성했습니다. 시험 시행기관의 자격 안내·출제 기준에서 과목과 변경 공지를 확인할 수 있습니다.
SQLD 전체 목차
과목별 이론
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
단원별 객관식
- 1과목 · 1장 1~3절 · 데이터 모델·엔터티·속성
- 1과목 · 1장 4~5절 · 관계·식별자와 카디널리티
- 1과목 · 2장 1~3절 · 정규화·조인·트랜잭션 모델
- 1과목 · 2장 4~5절 · NULL·본질식별자·인조식별자
- 2과목 · 1장 1~2절 · 관계형 DB와 SELECT·DISTINCT
- 2과목 · 1장 3절 · 문자·숫자 함수와 CASE
- 2과목 · 1장 4절 · WHERE·날짜 범위·연산자 우선순위
- 2과목 · 1장 5~6절 · 집계·GROUP BY·HAVING·ORDER BY
- 2과목 · 1장 7~8절 · INNER·OUTER·표준 조인
- 2과목 · 2장 1절 · 서브쿼리·EXISTS·스칼라 서브쿼리
- 2과목 · 2장 2~3절 · 집합 연산·ROLLUP·CUBE·GROUPING
- 2과목 · 2장 4~5절 · 윈도우 함수·순위·Top N
- 2과목 · 2장 6~8절 · 계층형 질의·셀프 조인·PIVOT·정규표현식
- 2과목 · 3장 1~2절 · DML·TCL과 트랜잭션
- 2과목 · 3장 3~4절 · DDL·DCL·제약조건·권한
실습
- SQL 학습 실습 1 · 6작업 · SELECT·조건·정렬
- SQL 학습 실습 2 · 6작업 · NULL·COUNT·평균
- SQL 학습 실습 3 · 6작업 · 날짜 범위·문자 조건
- SQL 학습 실습 4 · 6작업 · GROUP BY·HAVING·조건부 합계
- SQL 학습 실습 5 · 6작업 · 조인·행 수·미주문 고객
- SQL 학습 실습 6 · 6작업 · 서브쿼리·EXISTS·NOT EXISTS
- SQL 학습 실습 7 · 6작업 · 순위·동률·고객별 Top N
- SQL 학습 실습 8 · 6작업 · 집합 연산·조건부 피벗·전체 검산