English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 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;