DDL (데이터 정의어, Data Definition Language)
- 테이블 등 데이터 구조를 정의하는 데 사용하는 명령어
- CREATE, ALTER, DROP, RENAME
테이블 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE TABLE 테이블명 ( 컬럼명1 자료형 [NOT NULL] [DEFAULT 기본값] [PRIMARY KEY] [AUTO_INCREMENT] [UNIQUE], 컬럼명2 자료형, -- 각 컬럼은 콤마(,)로 연결됨 ... [PRIMARY KEY (컬럼명)] -- 이런 식으로 기본키 지정도 가능 [FOREIGN KEY (컬럼명) REFERENCES 부모테이블(부모기본키)] [ON DELETE 옵션] [ON UPDATE 옵션] ); | cs |
# [NOT NULL]
- 해당 컬럼에서 NULL 값을 허용하지 않음
# [DEFAULT 기본값]
- 레코드 삽입 시 해당 컬럼의 값을 입력하지 않았을 때 적용되는 기본값을 지정함
- 컬럼의 자료형에 맞게 기본값을 입력할 것
ex) VARCHAR(n) → '미정'
- 자동으로 현재 날짜/시간이 삽입되도록 하기
: 컬럼명 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
# [PRIMARY KEY (컬럼명)]
- 해당 컬럼 (or 컬럼 조합)을 각 레코드를 식별하는 기본키로 지정함
- 레코드별로 고유한 값을 가짐 (중복 시 오류)
- NULL 값을 허용하지 않음 → 자동으로 NOT NULL로 설정됨
- 자동으로 인덱스가 생성됨 → 검색 속도 향상
- PK를 수정하면 해당 컬럼에 대한 인덱스가 자동으로 수정됨
(PK는 인덱스의 일종)
# [AUTO_INCREMENT]
- 자동으로 순차적인 번호를 생성해주는 기능 (1, 2, 3, ...)
- 기본키에 활용할 수 있음
- 새로운 레코드를 삽입할 때마다 값이 자동으로 증가하며, 일련번호를 생성함
- 중복된 값이 입력되지 않음
# [FOREIGN KEY (컬럼명) REFERENCES 부모테이블(부모기본키)]
- 해당 컬럼을 외래키로 지정함
→ 해당 외래키는 '부모테이블'의 '기본키'를 참조함
# [UNIQUE]
- UNIQUE가 설정된 컬럼에 대해서는 각 레코드 값이 모두 고유한 값을 가져야 함
- 장점
1) 데이터 중복 방지
2) 데이터 일관성 유지
- PRIMARY KEY와의 차이점 : NULL 값 허용
- 자동으로 인덱스가 생성됨 → 검색 속도 향상
# 참조 무결성 옵션
1) 부모 테이블의 레코드 삭제 시 옵션
옵션 | 설명 |
ON DELETE CASCADE | 관련 레코드를 함께 삭제함 |
ON DELETE NO ACTION | 참조되고 있는 레코드는 삭제하지 못하게 함 (기본값) |
ON DELETE SET NULL | 관련 레코드의 외래키 값을 NULL로 변경함 |
ON DELETE SET DEFAULT | 관련 레코드의 외래키 값을 기본값으로 변경함 |
2) 부모 테이블의 레코드 수정 시 옵션
옵션 | 설명 |
ON UPDATE CASCADE | 관련 레코드의 외래키 값을 함께 수정함 |
ON UPDATE NO ACTION | 참조되고 있는 레코드는 수정하지 못하게 함 |
ON UPDATE SET NULL | 관련 레코드의 외래키 값을 NULL로 변경함 |
ON UPDATE SET DEFAULT | 관련 레코드의 외래키 값을 기본값으로 변경함 |
테이블 복사본 생성 (데이터 포함)
CREATE TABLE 새_테이블명
AS
SELECT 컬럼1, ... FROM 기존_테이블명
[WHERE 조건];
테이블 구조 복사본 생성 (데이터 미포함)
CREATE TABLE 새_테이블명
AS
SELECT 컬럼1, ... FROM 기존_테이블명
WHERE 1=2; -- 거짓 조건 활용
- 거짓 조건을 활용하여, 모든 데이터가 조건에 맞지 않게 해서 데이터 없이 구조만 복사함
기타 메모
- 예약어와 동일한 이름으로 테이블명 정의하기 : `테이블명`
→ 따옴표가 아니라 백틱(`)임에 유의
'SQL' 카테고리의 다른 글
[SQL] DML - 데이터 삽입/변경/삭제 (INSERT, UPDATE, DELETE) (0) | 2023.03.06 |
---|---|
[SQL] DDL - 테이블 변경/삭제 (ALTER, RENAME, DROP, TRUNCATE) (0) | 2023.03.06 |
[SQL] 기본 명령어 (DB 생성 및 삭제, 테이블 구조 조회 등) (0) | 2023.03.06 |
[SQL] MySQL 초기 설정 (안전 모드 해제, 코드 힌트 대문자로 설정) (0) | 2023.03.06 |
[SQL] 자료형 (Data type) (0) | 2023.03.06 |