SQL DDL과 DCL - 테이블 정의와 권한 관리
요약
SQL의 3대 분류(DDL, DML, DCL)를 알아보고, 테이블을 생성/수정/삭제하는 DDL과 권한을 부여/회수하는 DCL을 정보처리기사 실기 기출문제와 함께 학습합니다.
SQL 분류 핵심 정리
SQL(Structured Query Language)은 데이터베이스1를 다루기 위한 언어입니다. 크게 3가지로 분류됩니다.
| 분류 | 이름 | 주요 명령어 | 설명 |
|---|---|---|---|
| DDL | 데이터 정의어 | CREATE, ALTER, DROP, TRUNCATE | 테이블 구조를 정의/수정/삭제 |
| DML | 데이터 조작어 | SELECT, INSERT, UPDATE, DELETE | 데이터를 조회/추가/수정/삭제 |
| DCL | 데이터 제어어 | GRANT, REVOKE | 사용자 권한2을 부여/회수 |
DDL (Data Definition Language) - 데이터 정의어
DDL은 테이블, 뷰3 등 데이터베이스 구조(스키마)를 만들고, 바꾸고, 없애는 명령어입니다.
아래는 DDL에서 사용 가능한 4가지 명령어입니다. 각 명령어의 역할과 문법을 순서대로 살펴봅니다.
CREATE TABLE - 테이블 생성
여기서 컬럼명4은 테이블의 각 열 이름, 데이터타입5은 그 열에 저장할 값의 형식, [제약조건]6은 입력 값에 적용할 규칙입니다. [ ]로 감싸진 항목은 생략 가능한 선택 요소입니다.
자주 사용되는 제약조건:
예시:
ALTER TABLE - 테이블 수정
테이블의 구조(컬럼)를 변경할 때 사용합니다. ADD는 새 컬럼을 추가, MODIFY는 기존 컬럼의 데이터타입이나 제약조건을 변경, DROP COLUMN은 컬럼을 삭제합니다.
DROP - 테이블/뷰 삭제
테이블이나 뷰를 구조째로 삭제합니다. 테이블에 저장된 데이터도 모두 함께 사라집니다.
CASCADE vs RESTRICT:
CASCADE와 RESTRICT는 삭제 대상 테이블이나 뷰를 다른 테이블(또는 뷰)이 참조하고 있을 때 어떻게 처리할지를 지정합니다. 옵션을 생략하면 RESTRICT가 적용됩니다.
| 옵션 | 설명 |
|---|---|
| CASCADE | 해당 테이블이나 뷰를 참조하는 다른 테이블·뷰도 함께 삭제 |
| RESTRICT | 다른 테이블·뷰가 참조하고 있으면 삭제 거부 (옵션 생략 시 기본 적용) |
시나리오 예시:
직원 테이블의 회사코드 컬럼이 회사 테이블의 기본키를 외래키로 참조하고 있는 상황을 가정합니다.
TRUNCATE - 테이블 데이터 전체 삭제
테이블 구조는 유지하면서 모든 데이터(행)만 삭제합니다.
TRUNCATE 전/후 비교:
TRUNCATE 전 학생 테이블:
| 학번 | 이름 | 학년 |
|---|---|---|
| 20241001 | 김철수 | 1 |
| 20241002 | 이영희 | 2 |
TRUNCATE 후 학생 테이블:
| 학번 | 이름 | 학년 |
|---|---|---|
| (행 없음) |
컬럼 구조(학번, 이름, 학년)는 그대로 남아 있고, 저장된 데이터만 모두 사라집니다.
DCL (Data Control Language) - 데이터 제어어
데이터베이스에는 여러 사용자(DBA, 일반 사용자, 애플리케이션 계정 등)가 접근합니다. 사용자마다 허용할 작업 범위가 다르므로, 권한을 세밀하게 제어할 필요가 있습니다. DCL은 이러한 사용자 권한을 부여하거나 회수하는 명령어입니다.
GRANT - 권한 부여
권한 종류:
| 권한 | 설명 |
|---|---|
| SELECT | 조회 권한 |
| INSERT | 삽입 권한 |
| UPDATE | 수정 권한 |
| DELETE | 삭제 권한 |
| ALL | 모든 권한 |
예시:
REVOKE - 권한 회수
예시:
정보처리기사 실기 대비 문제
Footnotes
-
데이터를 체계적으로 저장하고 관리하는 저장소. 여러 사람이 동시에 접근할 수 있으며, 데이터 중복과 불일치를 줄이는 것을 목표로 합니다. ↩
-
어떤 사용자가 어떤 테이블에 대해 SELECT(조회), INSERT(삽입), UPDATE(수정), DELETE(삭제) 등을 수행할 수 있는지를 결정하는 접근 허가 단위입니다. ↩
-
하나 이상의 테이블을 기반으로 만든 가상 테이블입니다. 실제 데이터를 저장하지 않고, 조회 쿼리를 저장해 두었다가 필요할 때 테이블처럼 사용합니다. ↩
-
테이블의 각 열(세로 방향)을 나타내는 이름입니다. 예: 학번, 이름, 학년. ↩
-
컬럼에 저장할 값의 종류와 형식을 지정합니다.
INT는 정수,VARCHAR(n)은 최대 n자의 가변 문자열입니다. ↩ -
컬럼에 입력 가능한 값을 제한하는 규칙입니다.
PRIMARY KEY,NOT NULL,UNIQUE,CHECK,DEFAULT등이 있습니다. ↩ -
아직 값이 입력되지 않았음을 나타내는 특수한 상태입니다. 0이나 빈 문자열("")과 다르며, "모른다" 또는 "해당 없음"을 의미합니다. ↩