[MySQL] DDL - 테이블 생성(CREATE)
DDL (데이터 정의어, Data Definition Language)
- 테이블 등 데이터 구조를 정의하는 데 사용하는 명령어
- CREATE, ALTER, DROP, RENAME
테이블 생성
CREATE TABLE 테이블명 (
컬럼명1 자료형 [NOT NULL] [DEFAULT 기본값]
[PRIMARY KEY] [AUTO_INCREMENT]
[UNIQUE],
컬럼명2 자료형, -- 각 컬럼은 콤마(,)로 연결됨
...
[PRIMARY KEY (컬럼명)] -- 이런 식으로 기본키 지정도 가능
[FOREIGN KEY (컬럼명) REFERENCES 부모테이블(부모기본키)]
[ON DELETE 옵션]
[ON UPDATE 옵션]
);
# [NOT NULL]
- 해당 컬럼에서 NULL 값을 허용하지 않음
# [DEFAULT 기본값]
- 레코드 삽입 시 해당 컬럼의 값을 입력하지 않았을 때 적용되는 기본값을 지정함
- 컬럼의 자료형에 맞게 기본값을 입력할 것
ex) VARCHAR(n) → '미정'
- 자동으로 현재 날짜/시간이 삽입되도록 하기
: 컬럼명 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
# [PRIMARY KEY (컬럼명)]
- 해당 컬럼 (or 컬럼 조합)을 각 레코드를 식별하는 기본키로 지정함
- 각 행을 고유하게 식별 가능(UNIQUE)
- 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; <- 거짓 조건 활용
- 거짓 조건을 활용하여, 모든 데이터가 조건에 맞지 않게 해서 데이터 없이 구조만 복사함