본문 바로가기

IT/SQL

[sql] alter table, 테이블의 컬럼 정보 수정 및 컬럼 삭제

SQL 테이블 수정

테이블을 수정할 때는 ALTER TABLE이라는 식을 사용한다. 테이블의 이름이나 테이블 안에 있는 여러 필드를 변경한다던지, 컬럼을 더하거나 삭제할 때도 유용하게 사용할 수 있다. ALTER TABLE은 사용 목적에 따라서 ADD, DROP, MODIFY 코멘드랑 항상 함께 쓰이는데 지금부터 하나씩 알아보도록 하자.

 

테이블에 컬럼 추가하기 - add

ALTER TABLE 테이블 이름
ADD 추가할 컬럼명 데이터타입
[ FIRST | AFTER 컬럼명];

 

  • ALTER TABLE 뒤에 수정할 테이블 이름을 알려주고, 컬럼을 추가하겠다는 의미의 ADD를 넣어준다.
    이어서 추가할 컬럼명과 그 컬럼의 데이터 타입을 넣어준다.
  • 뒤이어 나오는 FIRST 또는 AFTER 코멘트는 옵션이므로 넣어도 되고 안넣어도 된다.
  • 특정 컬럼 뒤에 넣고 싶다면 AFTER 뒤에 그 특정 컬럼명을 넣어주면 된다.
    이 값을 넣지 않으면 새로 만들어진 컬럼은 테이블의 가장 마지막에 위치하게 된다.

예시로 members라는 테이블에 varchar 타입의 Email이라는 컬럼을 address 컬럼 뒤에 넣어 보자.

 

> desc members;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| memberID | int(11)      | YES  |     | NULL    |       |
| name     | varchar(255) | YES  |     | NULL    |       |
| address  | varchar(255) | YES  |     | NULL    |       |
| phone    | varchar(20)  | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.053 sec)

> ALTER TABLE members
ADD Email varchar(50)
AFTER address;
Query OK, 0 rows affected (0.074 sec)
Records: 0  Duplicates: 0  Warnings: 0

> desc members;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| memberID | int(11)      | YES  |     | NULL    |       |
| name     | varchar(255) | YES  |     | NULL    |       |
| address  | varchar(255) | YES  |     | NULL    |       |
| email    | varchar(50)  | YES  |     | NULL    |       |
| phone    | varchar(20)  | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.024 sec)

 

 

테이블에서 컬럼 수정하기 - modify

이미 만들어진 컬럼을 수정할 때는 ALTER TABLE과 함께 modify 코멘트를 사용하는데, 먼저 만드는 방법을 알아보자.

SQL Server / MS Access

ALTER TABLE 테이블명
ALTER COLUMN 컬럼명 데이터타입;

 

MySQL, Oracle (10g 이전 버전)

ALTER TABLE 테이블명
MODIFY COLUMN 컬럼명 데이터타입;

 

Oracle (10g 이후 버전)

ALTER TABLE 테이블 이름
MODIFY 수정할 컬럼명 컬럼정의
[ FIRST | AFTER 컬럼명];

  


바로 예시를 통해서 사용법을 알아보자. 
members 테이블의 name 컬럼의 varchar 크기를 100으로 만들고 null값을 허용하지 않도록 변경해 보았다.

> desc members;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| memberID | int(11)      | YES  |     | NULL    |       |
| name     | varchar(255) | YES  |     | NULL    |       |
| address  | varchar(255) | YES  |     | NULL    |       |
| email    | varchar(50)  | YES  |     | NULL    |       |
| phone    | varchar(20)  | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.024 sec)

> ALTER TABLE members
    -> MODIFY name varchar(100) NOT NULL;
Query OK, 0 rows affected (0.149 sec)
Records: 0  Duplicates: 0  Warnings: 0

> DESC members;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| memberID | int(11)      | YES  |     | NULL    |       |
| name     | varchar(100) | NO   |     | NULL    |       |
| address  | varchar(255) | YES  |     | NULL    |       |
| email    | varchar(50)  | YES  |     | NULL    |       |
| phone    | varchar(20)  | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.052 sec)


name 컬럼의 varchar 타입 크기가 255에서 100으로 변경되었고, null값은 허용하지 않는다는 의미로 null은 yes에서 no로 변경된 것을 확인할 수 있다.

 

 

테이블에서 컬럼 삭제하기

컬럼을 삭제할 때는 DROP COLUMN 코멘트를 함께 사용한다.

ALTER TABLE 테이블명
DROP COLUMN 컬럼명;

 

바로 예문을 통해 members 테이블에 있는 email 컬럼을 삭제 해보자.

> DESC members;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| memberID | int(11)      | YES  |     | NULL    |       |
| name     | varchar(100) | NO   |     | NULL    |       |
| address  | varchar(255) | YES  |     | NULL    |       |
| email    | varchar(50)  | YES  |     | NULL    |       |
| phone    | varchar(20)  | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.052 sec)

> ALTER TABLE members
    -> DROP COLUMN email;
Query OK, 0 rows affected (0.038 sec)
Records: 0  Duplicates: 0  Warnings: 0

> desc members;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| memberID | int(11)      | YES  |     | NULL    |       |
| name     | varchar(100) | NO   |     | NULL    |       |
| address  | varchar(255) | YES  |     | NULL    |       |
| phone    | varchar(20)  | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
4 rows in set (0.054 sec)


쿼리를 실행한 후, email 컬럼이 삭제된 것을 확인할 수 있다.

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.