DataScience/SQL

[PostgreSQL] ALTER TABLE 문법 총정리 - 컬럼 추가, 이름 변경, 삭제 등

사족보행 개발자 2024. 10. 18. 23:32
728x90

PostgresSQL

 

ALTER TABLE 명령어는 기존 테이블의 구조를 동적으로 변경하기 위해 사용되는 SQL 구문이다.

PostgreSQL에서 ALTER TABLE컬럼의 추가, 수정, 삭제뿐만 아니라

테이블의 이름 변경, 제약 조건의 추가 및 삭제 등 다양한 작업을 수행할 수 있다.

 

이 명령어는 데이터베이스 관리자가 데이터 구조를 유연하고 효과적으로 유지 및 관리하는 데 필수적인 도구로 간주된다. 따라서 PostgreSQL에서 ALTER TABLE을 이용해 수행할 수 있는 다양한 작업들을 상세히 설명하고, 예제와 함께 그 사용법을 정리해보고자 한다.

 

들어가기 앞서, ALTER TABLE 문법은 사용될 때, table을 지정하는 코드로 이해하면 된다.

 

따라서 모든 기능을 수행할 때, ALTER TABLE로 테이블을 지정해준다.

(ALTER는 바꾸다는 의미이며, 바꿀 타겟 테이블을 지정하는 것이라고 생각하면 된다.)

 

계속해서 나올 문법이기에, 보면서 눈에 익히면 좋을 것 같다.

 

1. 컬럼 추가 (Add Column)

테이블에 새로운 컬럼을 추가할 때는 ADD COLUMN 구문을 사용한다.

이를 통해 데이터의 확장성을 높이고 기존 테이블 구조에 필요한 새로운 속성을 동적으로 추가할 수 있다

 

ALTER TABLE 테이블_이름
ADD COLUMN 컬럼_이름 데이터_타입 [제약 조건];

 

위와같이 ALTER TABLE로 table을 지정하고,

ADD COLUMN으로 컬럼 이름과 타입, UNIQUE와 같은 조건을 달아주면 된다.

 

예시는 아래와 같다.

ALTER TABLE employees
ADD COLUMN birth_date DATE;

 

위 명령어는 employees 테이블에 birth_date라는 새로운 컬럼을 추가한다.

이를 통해 직원의 생년월일 정보를 저장할 수 있게 된다.

 

2. 컬럼 수정 (Modify Column)

기존 컬럼의 데이터 타입이나 제약 조건을 변경할 때는 ALTER COLUMN 구문을 사용한다.

이를 통해 데이터의 정확성과 유효성을 보장할 수 있으며, 테이블 구조가 데이터의 변화에 맞춰 유연하게 변경될 수 있다.

1) 데이터 타입 변경

기존 컬럼의 데이터 타입을 변경함으로써,

저장된 데이터의 형태를 변경하거나 더 많은 정보를 저장할 수 있도록 컬럼을 확장할 수 있다.

ALTER TABLE 테이블_이름
ALTER COLUMN 컬럼_이름 SET DATA TYPE 새로운_데이터_타입;

-- 예시
ALTER TABLE employees
ALTER COLUMN salary SET DATA TYPE NUMERIC(15, 2);

 

ALTER COLUMN으로 컬럼명을 지정하고, 그 뒤에 SET을 통해 타입을 바꿔줄 수 있다.

 

위 명령어는 employees 테이블의 salary 컬럼의 데이터 타입을 NUMERIC(15, 2)로 변경한다.

이를 통해 보다 큰 범위의 급여 데이터를 소수점 두 자리까지 정밀하게 저장할 수 있게 된다.

 

2) 컬럼 이름 변경

컬럼 이름을 변경하면 데이터베이스 구조의 가독성과 의미를 개선할 수 있다.

 

컬럼의 이름을 바꿔주는 것은 RENAME COLUMN A TO A'으로 사용할 수 있다.

 

ALTER TABLE 테이블_이름
RENAME COLUMN 기존_컬럼_이름 TO 새로운_컬럼_이름;

-- 예시
ALTER TABLE employees
RENAME COLUMN birth_date TO date_of_birth;

 

위 명령어는 employees 테이블의 birth_date 컬럼명을 date_of_birth로 변경한다.

이는 컬럼의 의미를 더욱 명확하게 표현하기 위함이다.

 

테이블을 지정하고, 이름을 바꿔준다.

 

3. 컬럼 삭제 (Drop Column)

더 이상 필요하지 않은 컬럼을 삭제할 때는 DROP COLUMN 구문을 사용한다.

이를 통해 데이터베이스의 복잡성을 줄이고 성능을 최적화할 수 있다.

 

ALTER TABLE 테이블_이름
DROP COLUMN 컬럼_이름 [CASCADE | RESTRICT];

-- 예시
ALTER TABLE employees
DROP COLUMN birth_date;

 

위 명령어는 employees 테이블에서 birth_date 컬럼을 삭제한다.

컬럼 삭제는 주의해서 수행해야 하며, 데이터 손실을 방지하기 위해 사전에 백업을 해두는 것이 좋다.

 

여기서, DROP 할 때, CASACADE와 RESTRICT의 두가지 옵션이 존재한다.

 

두 옵션을 정리하면 CASACADE의 경우, 종속된 모든 객체와 관계를 함께 삭제한다.

RESTRICT는 종속된 객체나 관계를 유지한 상태로 제거한다. (종속 객체의 삭제를 막는다.)

 

CASCADE는 삭제 과정에서 자동으로 종속된 객체를 모두 제거해 주기 때문에 편리할 수 있지만,

데이터 손실이 발생할 위험이 있다.

예를 들어, 컬럼을 삭제하면서

다른 테이블에서 이 컬럼을 참조하는 데이터도 모두 삭제되기 때문에 신중하게 사용해야 합니다.


RESTRICT는 안전하게 컬럼을 삭제하려는 경우에 유용합니다. 

삭제 전에 종속 관계를 수동으로 해제하거나 관련 데이터를 먼저 처리해야 하므로, 

데이터의 무결성을 보장할 수 있습니다.

 

4. 제약 조건 추가/삭제 (Add/Drop Constraints)

제약 조건을 통해 데이터의 무결성을 유지하고 데이터베이스의 품질을 보장할 수 있다. ALTER TABLE을 사용하여 제약 조건을 추가하거나 삭제할 수 있다.

1) 제약 조건 추가

제약 조건을 추가하면 데이터 입력 시 특정 규칙을 강제하여 데이터의 유효성을 보장할 수 있다.

 

ALTER TABLE 테이블_이름
ADD CONSTRAINT 제약_이름 제약_타입 (컬럼_이름);

-- 예시

ALTER TABLE employees
ADD CONSTRAINT unique_email UNIQUE (email);

 

위 명령어는 employees 테이블에 email 컬럼의 유일성을 보장하는 제약 조건을 추가한다.

이는 각 직원의 이메일이 고유해야 함을 보장하여 중복 입력을 방지한다.

 

2) 제약 조건 삭제

기존 제약 조건을 제거할 수 있다.

제약 조건을 삭제하는 것은 데이터의 유효성 검증을 느슨하게 하는 효과가 있으므로 신중하게 사용해야 한다.

 

ALTER TABLE 테이블_이름
DROP CONSTRAINT 제약_이름;

-- 예시

ALTER TABLE employees
DROP CONSTRAINT unique_email;

 

위 명령어는 employees 테이블에서 unique_email 제약 조건을 제거한다. 이는 데이터베이스의 유연성을 높이는 동시에 데이터 중복의 위험을 증가시킬 수 있다.

 

5. 테이블 이름 변경 (Rename Table)

테이블의 이름을 변경할 때는 RENAME TO 구문을 사용한다.

이는 데이터베이스 스키마의 가독성과 유지 관리를 개선하는 데 도움을 준다.

 

컬럼 이름을 바꾸는 RENAME COLUMN A TO A'와 헷갈리지 않도록 주의하는 것이 좋다.

 

ALTER TABLE 기존_테이블_이름
RENAME TO 새로운_테이블_이름;

-- 예시

ALTER TABLE employees
RENAME TO staff;

 

위 명령어는 employees 테이블의 이름을 staff로 변경한다.

이는 비즈니스 요구사항이나 데이터 모델의 변화에 따라 테이블의 의미를 더 잘 반영하기 위해 이루어진다.

 

6. 기타 기능

1) 테이블의 소유자 변경

테이블의 소유자를 변경하는 것은 데이터베이스 관리 권한을 다른 사용자에게 이전할 때 사용된다.

ALTER TABLE 테이블_이름
OWNER TO 새로운_소유자;

-- 예시

ALTER TABLE employees
OWNER TO admin;

 

2) NOT NULL 추가/제거

컬럼에 NOT NULL 제약 조건을 추가하거나 제거함으로써 해당 컬럼이 반드시 값을 가져야 하는지 여부를 설정할 수 있다.

 

ALTER TABLE 테이블_이름
ALTER COLUMN 컬럼_이름 SET NOT NULL;

-- 예시 

ALTER TABLE employees
ALTER COLUMN email SET NOT NULL;

 

위 명령어는 employees 테이블의 email 컬럼에 NOT NULL 제약을 추가한다.

이를 통해 모든 직원의 이메일 주소가 반드시 입력되도록 강제한다.

 

제거하는 방법은 DROP을 통해 할 수 있다.

 

ALTER TABLE 테이블_이름
ALTER COLUMN 컬럼_이름 DROP NOT NULL;

-- 예시

ALTER TABLE employees
ALTER COLUMN email DROP NOT NULL;

 

위 명령어는 employees 테이블의 email 컬럼에서 NOT NULL 제약을 제거한다.

이는 데이터를 입력할 때 해당 필드의 값이 없어도 허용하도록 변경하는 것이다.

 

정리하다보니, 생각보다 많이 길어졌다.

 

ALTER TABLE의 경우, 데이터의 형태가 바뀌거나, 새로운 컬럼이 필요할 때 등..

갑자기 사용하게 될 경우가 많은데, 빈도수가 높은 문법은 아니다 보니, 자주 헷갈리게 된다.

 

따라서 이번 정리를 통해 앞으로는 꼭 숙지할 수 있도록 준비해야겠다.

 

728x90