Post

5.3 Alter Table

테이블 변경 구문

ALTER TABLE은 테이의 정보를 변경하는 DDL 구문이다. ALTER TALBE은 주요한 세가지 기능을 지원한다.

  • Table 이름 변경
  • Constraint 변경
  • Column 변경

Table 이름 변경 (RENAME)

Table 0: Employee Table

employee_idnamecreated_atemail
1김철수2023-01-01 00:00:00ironsoo@naver.com
2이영희2023-01-02 15:20:00202@gmail.com
3홍길동2023-01-03 09:55:00hkd@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 Table5.1 PK/FK Constraint에서 다룬 내용을 바탕으로 설정하면 된다.

Constraint 변경의 활용

Employee 테이블을 기반으로, email에 대한 Unique Contraint (employee_email_unique)를 email과 name의 조합에 대한 Unique Contraint로 변경해보자. 이때 Constraint의 변경은 추가와 삭제만 지원하기 때문에 아래의 두 역할을 하는 쿼리문을 각각 실행해야한다.

  1. 기존 email에 대한 Unique Constraint 삭제
  2. 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;
This post is licensed under CC BY 4.0 by the author.