5.3 Alter Table
테이블 변경 구문
ALTER TABLE은 테이의 정보를 변경하는 DDL 구문이다. ALTER TALBE은 주요한 세가지 기능을 지원한다.
- Table 이름 변경
- Constraint 변경
- Column 변경
Table 이름 변경 (RENAME)
Table 0: Employee Table
employee_id | name | created_at | |
---|---|---|---|
1 | 김철수 | 2023-01-01 00:00:00 | ironsoo@naver.com |
2 | 이영희 | 2023-01-02 15:20:00 | 202@gmail.com |
3 | 홍길동 | 2023-01-03 09:55:00 | hkd@gmail.com |
Table의 이름을 변경하기 위해서는 ALTER ... RENAME
구문을 사용하면 된다. 사용 방법은 다음과 같다:
1
ALTER old_tb_name RENAME TO new_tb_name;
Table 이름 변경의 활용
Employee 테이블의 이름을 Worker라는 이름을 변경해보자. ALTER ... RENAME
을 이용하여 테이블명 변경을 수행할 수 있다:
1
ALTER employee RENAME TO worker;
Constraint 변경 (ADD/DROP CONSTRAINT)
ATLER TALBE을 통해서 Constraint는 추가와 삭제 기능을 지원한다. 각각의 구문은 다음과 같이 사용할 수 있다.
1
2
3
4
5
-- Contraint 추가
ALTER TABLE tb_name ADD CONSTRAINT contraint_name ...;
-- Contraint 삭제
ALTER TABLE tb_name DROP CONSTRAINT contraint_name;
여기서 Contraint의 추가는 5.2 Create Table과 5.1 PK/FK Constraint에서 다룬 내용을 바탕으로 설정하면 된다.
Constraint 변경의 활용
Employee 테이블을 기반으로, email에 대한 Unique Contraint (employee_email_unique
)를 email과 name의 조합에 대한 Unique Contraint로 변경해보자. 이때 Constraint의 변경은 추가와 삭제만 지원하기 때문에 아래의 두 역할을 하는 쿼리문을 각각 실행해야한다.
- 기존 email에 대한 Unique Constraint 삭제
- name과 email에 대한 Unique Constraint 추가
이름 쿼리문으로 작성해보면 다음과 같다:
1
2
3
4
5
-- 기존 Constraint 삭제 (1)
ALTER TABLE employee DROP CONSTRAINT employee_email_unique;
-- 새로운 Constraint 추가 (2)
ALTER TABLE employee ADD CONSTRAINT employee_name_email_unique UNIQUE(name, email);
Column 변경 (ADD/DROP/ALTER COLUMN)
SQL 구문을 이용한 Column의 변경은 추가, 삭제뿐만 아니라 타입/기본값의 변경도 지원한다. 컬럼변경을 위한 문법은 아래와 같다:
1
2
3
4
5
6
7
8
-- Column 추가
ALTER TABLE tb_name ADD COLUMN col_name ...;
-- Column 삭제
ALTER TABLE tb_name DROP COLUMN col_name ...;
-- Column 수정
ALTER TABLE tb_name ALTER COLUMN col_name ...;
Column 변경의 활용
Employee 테이블의 컬럼정보를 변경하는 쿼리문을 작성해보자.
Q1
직원의 전화번호를 의미하는 phone_number
컬럼을 추가하고 기존 연락처인 email
을 삭제해보자. ADD COLUMN
을 이용하여 phone_num을 추가하고 DROP COLUMN
을 이용하여 email 컬럼을 삭제하여 수행할 수 있다:
1
2
3
4
5
-- 기존 Column 삭제
ALTER TABLE employee ADD COLUMN phone_number VARCHAR;
-- 새로운 Column 추가
ALTER TABLE employee DROP COLUMN email;
Q2
create_at의 기본값을 레코드의 생성시각으로 설정해보자. 이미 생성한 컬럼의 기본 값은 ALTER COLUMN ... SET DEFAULT
구문을 이용하여 설정/변경 할 수 있다. 레코드의 생성시각을 기본값으로 설정하기 위해서는 4.4 Time Function에서 다룬 NOW()
함수를 통해서 현재 시각을 지정하면 된다:
1
ALTER TABLE employee ALTER COLUMN created_at SET DEFAULT NOW();
Q3
name을 최대길이 10의 VARCHAR로 변경해보자. 컬럼의 type을 변경하기 위해서는 ALTER COLUMN ... TYPE
구문을 이용한다. 컬럼을 생성할때와 같이 타입을 지정하면 된다. VARCHAR, TEXT와 같은 가변길이 문자열은 VARCHAR(length)/TEXT(length)
과 같이 정의함으로써 최대길이를 지정할 수 있다:
1
ALTER TABLE employee ALTER COLUMN name TYPE VARCHAR(10);
Q4
name의 컬럼명을 employee_name으로 변경해보자. SQL은 컬럼의 이름변경을 위한 RENAME ... TO
구문을 제공한다. 테이블의 이름을 변경하는 것과 유사하게 사용할 수 있다.
1
ALTER TABLE employee RENAME COLUMN name TO employee_name;