[SQL - DDL]
💡 DDL이란?
- Data Define Language로 데이터 정의어라고 한다.
- DB 구조, 데이터 형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용하는 언어
- 3가지 유형 : CREATE, ALTER, DROP
💡 CREATE 명령어는 어떻게 사용할까?
CREATE SCHEMA
: 스키마를 정의하는 명령문
| 📌 일반 형식 |
| CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_id; |
| |
| CREATE SCHEMA 대학교 AUTHORIZATION 홍길동; |
CREATE DOMAIN
: 도메인을 정의하는 명령문
| 📌 일반 형식 |
| CREATE DOMAIN 도메인명 [AS] 데이터_타입 |
| [DEFAULT 기본값] |
| [CONSTRAINT 제약조건명 CHECK (범위값)]; |
| |
| CREATE DOMAIN SEX CHAR(1) |
| DEFAULT '남' |
| CONSTRAINT VALID-SEX CHECK(VALUE IN ('남', '여')); |
CREATE TABLE
: 테이블을 정의하는 명령문
| 📌 일반 형식 |
| CREATE TABLE 테이블명 |
| (속성명 데이터_타입 [DEFAULT 기본값] [NOT NULL], |
| [, PRIMARY KEY(기본키_속성명, )] |
| [, UNIQUE(대체키_속성명, )] |
| [, FOREIGN KEY(외래키_속성명, )] |
| REFERENCES 참조테이블(기본키_속성명, )] |
| [ON DELETE 옵션] |
| [ON UPDATE 옵션] |
| [, CONSTRAINT 제약조건명][CHECK (조건식)]); |
| |
| CREATE TABLE STUDENT |
| (이름 VARCHAR(15) NOT NULL, |
| 학번 CHAR(8), |
| 전공 CHAR(5), |
| 성별 SEX, |
| 생년월일 DATE, |
| PRIMARY KEY(학번), |
| FOREIGN KEY(전공) REFERENCES 학과(학과코드) |
| ON DELETE SET NULL |
| ON UPDATE CASCADE, |
| CONSTRAINT 생년월일제약 CHECK (생년월일 >= '1980-01-01')); |
CREATE VIEW
: 뷰를 정의하는 명령문
| 📌 일반 형식 |
| CREATE VIEW 뷰명[(속성명[, 속성명, ])] |
| AS SELECT문; |
| |
| CREATE VIEW 안산고객(성명, 전화번호) |
| AS SELECT 성명, 전화번호 |
| FROM 고객 |
| WHERE 주소 = '안산시'; |
CREATE INDEX
: 인덱스를 정의하는 명령문
| 📌 일반 형식 |
| CREATE [UNIQUE] INDEX 인덱스명 |
| ON 테이블명(속성명[ASC | DESC]]) |
| [CLUSTER]; |
| |
| CRETAE UNIQUE INDEX 고객번호_idx |
| ON 고객(고객번호 DESC); |
| - UNIQUE : 중복값 없는 속성으로 인덱스 생성 |
| - ASC : 오름차순 (DEFAULT) |
| - DESC : 내림차순 |
💡 ALTER 명령어는 어떻게 사용할까?
ALTER TABLE
: 테이블에 대한 정의를 변경하는 명령문
| 📌 일반 형식 |
| ALTER TABLE 테이블명 ADD/ALTER/DROP COLUMN 속성명 [CASCADE]; |
| |
| ALTER TABLE 학생 ADD VARCHAR(3); |
| ALTER TABLE 학생 ALTER 학번 VARCHAR(10) NOT NULL; |
| - ADD : 새로운 속성 추가 |
| - ALTER : 특정 속성 Default 값 변경 |
| - DROP COLUMN : 특정 속성 삭제 |
💡 DROP 명령어는 어떻게 사용할까?
DROP
: 스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스 제약 조건 등을 제거하는 명령문
| 📌 일반 형식 |
| DROP SCHEMA/DOMAIN/TABLE/VIEW/INDEX/CONSTRAINT 이름 [CASCADE | RESTRICT]; |
| - CASCADE : 제거할 요소를 참조하는 다른 모든 개체 함께 제거 |
| - RESTRICT : 제거할 요소 참조중일 때는 제거 취소 |