본문 바로가기

DB와 SQL

Part 3. SQL - TABLE 구조 변경 : DDL(ALTER)

728x90

MySQL ALTER TABLE문을 공부해보겠습니다.

 

저번 시간에 CREATE를 공부할 때 생성했던 checklists 테이블을 이용해보겠습니다.

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| todo_id      | int          | NO   | PRI | NULL    | auto_increment |
| task_id      | int          | NO   | PRI | NULL    |                |
| todo         | varchar(255) | NO   |     | NULL    |                |
| is_completed | tinyint(1)   | NO   |     | 0       |                |
+--------------+--------------+------+-----+---------+----------------+

 

1. 테이블에 열 추가하기

테이블에 열을 추가하기 위해선 ADD 문을 사용해야 합니다.

 

ALTER TABLE tbl_name ADD col_name column_definition [FIRST | AFTER col_name]

tbl_name : 새 열을 추가하려는 테이블의 이름

col_name : 새 열의 이름

column_definition : 새 열의 데이터 유형과 최대 크기 등의 제약 조건 지정

FIRST, AFTER : 새 열의 위치를 지정(default : 열 목록 끝에 추가)

 

예제를 통해 확인해보겠습니다.

ALTER TABLE checklists ADD n_column VARCHAR(10) NOT NULL;

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| todo_id      | int          | NO   | PRI | NULL    | auto_increment |
| task_id      | int          | NO   | PRI | NULL    |                |
| todo         | varchar(255) | NO   |     | NULL    |                |
| is_completed | tinyint(1)   | NO   |     | 0       |                |
| n_column     | varchar(10)  | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

 

작성한 예제처럼 ADD 문만 계속 추가해 한번에 여러열을 추가할 수 있습니다.

 

2. 테이블 열 수정하기

테이블의 열을 수정하기 위해선 MODIFY 문을 사용해야 합니다.

 

ALTER TABLE checklists MODIFY col_name column_definition [FIRST | AFTER col_name]

 

예제를 통해 확인해보겠습니다.

ALTER TABLE checklists MODIFY n_column Int(10);

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| todo_id      | int          | NO   | PRI | NULL    | auto_increment |
| task_id      | int          | NO   | PRI | NULL    |                |
| todo         | varchar(255) | NO   |     | NULL    |                |
| is_completed | tinyint(1)   | NO   |     | 0       |                |
| n_column     | int          | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

 

여기서 잘보아야할 것이 기존에 NOT NULL이던 컬럼이 수정 시 명시하지 않았더니 NULL을 허용하도록 변경되었습니다. 그러니 항상 테이블의 구조를 확인한 후 변경하는 것이 좋습니다. 그리고 MODIFY 또한 해당 구문을 추가하면 한번에 여러열을 수정할 수 있습니다.

 

3. 테이블에서 열 삭제하기

테이블에서 열을 삭제하기 위해선 DROP COLUMN문을 사용해야 합니다. 예제를 작성할 때 COLUMN 이 빠지고 DROP 만 있어도 수행됩니다.

 

ALTER TABLE tbl_name DROP COLUMN col_name;

 

예제를 통해 확인해보겠습니다.

ALTER TABLE checklists DROP n_column;

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| todo_id      | int          | NO   | PRI | NULL    | auto_increment |
| task_id      | int          | NO   | PRI | NULL    |                |
| todo         | varchar(255) | NO   |     | NULL    |                |
| is_completed | tinyint(1)   | NO   |     | 0       |                |
+--------------+--------------+------+-----+---------+----------------+

 

지금까지 만들어 사용했던 n_column을 삭제했습니다.

 

4. 테이블 이름 바꾸기

테이블 이름을 바꾸기 위해선 RENAME TO문을 사용해야 합니다.

 

ALTER TABLE tbl_name RENAME TO new_tbl_name;

 

예제를 통해 확인해보겠습니다.

ALTER TABLE checklists RENAME TO todolist;

+-------------------+
| Tables_in_example |
+-------------------+
| todolist          |
+-------------------+

 

show tables를 통해 확인해본 결과 잘변경되었습니다.

 

지금까지 공부했던 ADD,MODIFY,DROP 등은 오직 컬럼만 다루는 것이 아닙니다. 컬럼 외에 INDEX, KEY, 제약 등을 다룰 수 있습니다.

 

이렇게 오늘은 "열 추가, 변경, 이름 변경, 삭제"와 "테이블 이름 변경"을 알아봤습니다.

 

관련 내용은 아래에서 확인할 수 있습니다.

 

https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

 

MySQL :: MySQL 8.0 Reference Manual :: 13.1.9 ALTER TABLE Statement

13.1.9 ALTER TABLE Statement ALTER TABLE tbl_name [alter_option [, alter_option] ...] [partition_options] alter_option: { table_options | ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name] | ADD [COLUMN] (col_name column_definition,...) | AD

dev.mysql.com