English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL 테이블 수정 (ALTER TABLE 문)

이 튜토리얼에서는 SQL을 사용하여 기존 테이블을 변경하거나 수정하는 방법을 배울 것입니다.

기존 테이블 수정

테이블을 생성한 후, 사용을 시작하기 전에 필요한 열이나 제약 조건을 잊어버렸거나, 해당 열에 대해 잘못된 이름을 지정한 경우가 많습니다.

이 경우, ALTER TABLE 문을 사용하여 테이블의 열을 추가, 변경 또는 제거하여 기존 테이블을 변경하거나 수정할 수 있습니다.

생각해 보세요shippers의 데이터베이스에 다음과 같은 구조를 가진 테이블이 있습니다:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone        | varchar(60) | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

모든 ALTER TABLE 문을 shippers 테이블에 사용하겠습니다.

지금은 기존 shippers 테이블을 확장하기 위해 열을 추가하고자 합니다. 그러나, 이를 어떻게 SQL 명령어로 수행할 수 있을까요? 확인해 보겠습니다.

새로운 열 추가

 새로운 열을 기존 테이블에 추가하는 기본 문법:

ALTER TABLE table_name ADD column_name data_type constraints;					

아래 명령어는 shippers 테이블에 새로운 열 fax를 추가합니다.

ALTER TABLE shippers ADD fax VARCHAR(20);

현재, 위 명령어를 실행한 후, DESCRIBE shippers 명령어를 사용하여 테이블 구조를 볼 수 있습니다. MySQL 명령행에서는 다음과 같이 보입니다:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone        | varchar(60) | NO   |     | NULL    |                |
|2| fax | varchar(
+--------------+-------------+------+-----+---------+----------------+

주의:기존 테이블에 NOT NULL 열을 추가하려면 명시적인기본 값. 이 기본 값은 테이블에 이미 존재하는 각 행에 새 열을 채우기 위해 사용됩니다.

휴대폰:테이블에 새 열을 추가할 때 NULL을 지정하지 않았고 NOT NULL을 지정하지 않았다면, 해당 열을 NULL로 간주합니다.

MySQL은 기본적으로 새 열을 마지막에 추가합니다. 하지만 특정 열之后에 새 열을 추가하려면 다음과 같은 AFTER 절을 사용할 수 있습니다:

mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;					

MySQL은 다른 절을 제공하여 테이블의 첫 번째 위치에 새 열을 추가할 수 있습니다. 앞의 예제의 AFTER 절을 FIRST로 대체하여 첫 번째 위치에 추가하면 됩니다:shippers테이블의 시작에 열 fax를 추가합니다.

열 위치 변경

MySQL에서, 테이블을 이미 생성했지만 테이블의 기존 열 위치에 만족하지 않는 경우, 언제든지 다음 문법을 사용하여 변경할 수 있습니다:

ALTER TABLE table_name
  MODIFY column_name column_definition AFTER column_name;			

다음 문장은 열을fax위에shippers테이블의shipper_name열之后.

mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;					

제약 조건 추가

현재의 shippers 테이블에는 주요 문제가 있습니다. 중복된 전화번호를 포함한 기록을 삽입하려고 하면 이를 방지하지 않습니다. 이는 좋지 않습니다. 전화번호는 독립적이어야 합니다.

다음과 같이 제약 조건을 추가할 수 있습니다:phone열에 UNIQUE 제약 조건을 추가하여 이 문제를 해결할 수 있습니다. 제약 조건을 기존 테이블 열에 추가하는 기본 문법은 다음과 같습니다:

ALTER TABLE table_name ADD UNIQUE (column_name,...);					

다음 문장의 UNIQUE로phone열에 제약 조건을 추가합니다.

mysql> ALTER TABLE shippers ADD UNIQUE (phone);					

이 명령어를 실행한 후, 중복된 전화번호를 삽입하려고 할 때 오류 메시지를 받게 됩니다.

동일하게, 만약 생성한 테이블에 PRIMARY KEY가 없다면 다음 내용을 사용할 수 있습니다:

ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);					

정의되지 않았다면, 다음 문장이}}PRIMARY KEY 제약 조건을 추가합니다.shipper_id열.

mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);					

열 제거

기존 테이블에서 열을 제거하는 기본 문법:

ALTER TABLE table_name DROP COLUMN column_name;					

다음 문장에서shippers테이블에서 새로 추가한fax열.

mysql> ALTER TABLE shippers DROP COLUMN fax;					

위의 문장을 실행한 후, 테이블 구조를 확인하면 다음과 같습니다:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone        | varchar(20) | NO   | UNI | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

열 데이터 타입 변경

SQL Server에서 열 데이터 타입을 변경할 수 있는 다음 ALTER 절을 사용할 수 있습니다:

ALTER TABLE table_name ALTER COLUMN column_name new_data_type;					

하지만 MySQL 데이터베이스 서버는 ALTER COLUMN 문법을 지원하지 않습니다. 열을 수정할 수 있는 대체 변경 절을 지원합니다. 다음과 같이 표시할 수 있습니다:

ALTER TABLE table_name MODIFY column_name new_data_type;					

다음 문장은shippers테이블phone열의 현재 데이터 타입이 VARCHAR에서 CHAR로 변경되고, 길이는20을15。

mysql> ALTER TABLE shippers MODIFY phone CHAR(15);					

또한, MySQL 테이블의 열이 비어있는지 여부를切换할 수 있는 MODIFY 절을 사용할 수 있습니다. 기존 열 정의를 다시 지정하고 마지막에 null 또는 not null 제약 조건을 추가하여 다음과 같이 표시할 수 있습니다:

mysql> ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;					

테이블 이름 변경

MySQL에서 기존 테이블을 이름을 변경하는 기본 문법은 다음과 같습니다:

ALTER TABLE current_table_name RENAME new_column_name;					

다음 문장은 우리의shippers테이블 이름을 변경하십시오shipper

mysql> ALTER TABLE shippers RENAME shipper;					

다음과 같은 RENAME TABLE 문을 사용하여 MySQL에서 동일한 목적을 달성할 수 있습니다:

mysql> RENAME TABLE shippers TO shipper;