Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL

SQL ALTER TABLE 완벽 가이드: 테이블 구조 변경 방법 총정리

SQL의 ALTER TABLE 문은 테이블에 컬럼을 추가하거나, 기존 컬럼을 수정·삭제할 때 사용하는 명령어입니다. 이 문을 활용하면 이미 생성된 테이블, 심지어 레코드가 저장되어 있는 테이블이라도 생성 이후에 자유롭게 수정할 수 있습니다.


SQL 테이블을 운영하다 보면 구조를 변경해야 하는 상황이 자주 발생합니다. 예를 들어 특정 컬럼의 이름을 바꾸거나 새로운 컬럼을 추가하고 싶을 수 있습니다. 이러한 모든 변경 작업은 SQL ALTER TABLE 명령어 하나로 처리할 수 있습니다.

SQL ALTER TABLE이란?

ALTER TABLE 명령어를 사용하면 기존 테이블을 다음과 같은 방식으로 변경할 수 있습니다.

  • 컬럼 추가
  • 제약 조건(Constraint) 추가
  • 컬럼 삭제
  • 데이터 타입 변경
  • 컬럼 이름 변경

이 글에서는 실제 예제와 함께 SQL ALTER TABLE 명령어로 테이블을 변경하는 방법을 단계별로 살펴보겠습니다.

예제용 테이블 준비하기

이번 튜토리얼에서는 한 회사의 직원 정보를 저장하는 데이터베이스 테이블을 수정하는 시나리오를 가정합니다. 이 데이터베이스에는 회사에 재직 중인 모든 직원의 정보가 담겨 있으며, 테이블 이름은 "employees"입니다.

테이블을 생성한 뒤, 구조를 일부 변경해야겠다는 필요성을 느꼈다고 가정해 보겠습니다. 이때 SQL ALTER TABLE 명령어를 사용하면 됩니다.

테이블 생성 방법이 궁금하다면 SQL CREATE TABLE 관련 가이드를 먼저 참고하는 것도 좋습니다.

SQL ALTER TABLE: 테이블에 컬럼 추가하기

ALTER TABLE 명령어를 사용하면 SQL 테이블에 새로운 컬럼을 추가할 수 있습니다. 기존 테이블에 새 컬럼을 추가할 때 사용하는 기본 문법은 다음과 같습니다.

ALTER TABLE table_name ADD column_name data_type constraints;

예를 들어 "employees" 테이블에 모든 직원의 전화번호를 저장하는 새로운 컬럼을 추가한다고 가정해 보겠습니다. 컬럼 이름은 "phone_number"로 정하고, 최대 길이가 정해진 문자열을 저장할 수 있는 VARCHAR() 데이터 타입을 사용하며 별도의 제약 조건은 두지 않겠습니다.

이 경우 다음과 같은 문장으로 컬럼을 생성할 수 있습니다.

ALTER TABLE employees ADD phone_number VARCHAR(60);

이 명령을 실행하면 "employees" 테이블에 새로운 컬럼이 추가됩니다. 테이블 구조를 확인해 보면 "phone_number"라는 새 컬럼이 생긴 것을 확인할 수 있습니다.

FieldTypeDefault
namevarchar(60)NULL
titlevarchar(60)NULL
departmentvarchar(60)NULL
employee_numbervarchar(60)NULL
phone_numbervarchar(60)NULL

SQL에서 컬럼을 추가하는 더 자세한 방법이 궁금하다면 SQL add column 가이드를 참고해 보세요.

SQL ALTER TABLE: 테이블에 제약 조건 추가하기

앞서 우리는 테이블에 phone_number 컬럼을 추가했지만, 제약 조건을 설정하는 것을 잊었습니다.

제약 조건이 없으면 여러 직원에게 동일한 전화번호가 저장될 수 있으며, 이는 현실적으로 적절하지 않습니다.

이 문제를 해결하려면 "phone_number" 컬럼에 UNIQUE 제약 조건을 추가하면 됩니다. SQL에서 컬럼에 제약 조건을 추가하는 문법은 다음과 같습니다.

ALTER TABLE table_name ADD UNIQUE (column_name);

다음 명령으로 "phone_number" 컬럼에 UNIQUE 제약 조건을 추가할 수 있습니다.

ALTER TABLE employees ADD UNIQUE (phone_number);

다른 제약 조건을 추가하고 싶다면 "UNIQUE" 대신 NOT NULL, CHECK 등 다른 SQL 제약 조건을 지정하면 됩니다.

SQL ALTER TABLE: 테이블에서 컬럼 삭제하기

ALTER TABLE 명령어는 테이블에서 컬럼을 삭제할 때도 사용할 수 있습니다. 컬럼을 삭제할 때 사용하는 문법은 다음과 같습니다.

ALTER TABLE table_name DROP COLUMN column_name;

예를 들어 나중에 직원의 부서 정보를 다른 테이블과 연결하는 새로운 컬럼을 만들 계획이라고 가정해 보겠습니다. 이를 위해 기존의 "department" 컬럼을 삭제하려면 다음 명령을 실행하면 됩니다.

ALTER TABLE employees DROP COLUMN department;

명령을 실행하면 테이블에서 "department" 컬럼이 삭제됩니다. 이후 테이블 구조는 다음과 같습니다.

FieldTypeDefault
namevarchar(60)NULL
titlevarchar(60)NULL
employee_numbervarchar(60)NULL
phone_numbervarchar(60)NULL

SQL ALTER TABLE: 컬럼의 데이터 타입 변경하기

ALTER TABLE 명령어로 컬럼의 데이터 타입도 변경할 수 있습니다. 데이터 타입을 변경하는 기본 문법은 다음과 같습니다.

ALTER TABLE table_name ALTER COLUMN column_name new_data_type;

단, DBMS에 따라 문법이 조금씩 다릅니다. MySQL과 Oracle 10G 이전 버전, 그리고 Oracle 10G 이상 버전에서는 각각 다음과 같이 사용합니다.

ALTER TABLE table_name MODIFY COLUMN column_name new_data_type; (MySQL, Oracle 10G 이전)
ALTER TABLE table_name MODIFY column_name new_data_type; (Oracle 10G 이상)

처음 "employees" 테이블을 만들 때 "employee_number" 필드를 숫자가 아닌 VARCHAR() 타입으로 지정하는 실수를 했다고 가정해 보겠습니다. 이 오류를 바로잡으려면 다음 명령을 사용할 수 있습니다.

ALTER TABLE employees ALTER COLUMN employee_number INT;

이 명령은 "employee_number" 컬럼의 타입을 INT로 변경합니다. 변경된 테이블 구조는 다음과 같습니다.

FieldTypeDefault
namevarchar(60)NULL
titlevarchar(60)NULL
employee_numberintNULL
phone_numbervarchar(60)NULL

SQL ALTER TABLE: 테이블 이름 변경하기

ALTER TABLE 명령어로 SQL 테이블의 이름을 변경할 수도 있습니다. 테이블 이름을 변경하는 문법은 다음과 같습니다.

ALTER TABLE current_table RENAME new_table;

예를 들어 "employees" 테이블의 이름을 "old_employees_2019"로 변경하고 싶다면 다음 명령을 사용하면 됩니다.

ALTER TABLE employees RENAME old_employees_2019;

단, MySQL에서는 ALTER TABLE 명령어로 테이블 이름을 변경할 수 없습니다. MySQL에서는 대신 RENAME TABLE 명령어를 사용해야 합니다.

MySQL에서 테이블 이름을 변경하려면 다음과 같이 입력합니다.

RENAME TABLE employees TO old_employees_2019;

마무리

SQL ALTER TABLE 명령어를 사용하면 SQL에서 테이블 구조를 자유롭게 변경할 수 있습니다. 컬럼을 추가하거나 삭제할 수 있고, UNIQUE나 NOT NULL 같은 제약 조건도 손쉽게 수정할 수 있습니다.

SQL을 더 깊이 배우고 싶다면 SQL 학습 가이드를 확인해 보세요. 효율적으로 SQL을 익히는 핵심 팁과 전문가가 엄선한 학습 자료 목록을 만나볼 수 있습니다.