CodeGym /행동 /SQL SELF /ALTER TABLE로 테이블 구조 바꾸기

ALTER TABLE로 테이블 구조 바꾸기

SQL SELF
레벨 17 , 레슨 4
사용 가능

이제 이미 만들어진 테이블을 어떻게 바꿀 수 있는지 얘기해볼게. 프로젝트 하다 보면 뭔가 영원히 안 바뀌는 경우는 거의 없어 — 요구사항은 진짜 갑자기, 마치 bombaridilokrokodilo처럼 날아올 수도 있거든. 예를 들어, 프로덕트 매니저가 갑자기 모든 유저마다 프로필 배경색의 유니크한 아이디가 필요하다고 할 수도 있고, 아니면 VARCHAR(50)으로 이름 저장하는 게 너무 짧다고 느낄 수도 있어. 이미 "Bombaridilokrokodilo-Junior-Third"라는 유저가 있다면 더더욱!

이럴 때 PostgreSQL에서는 ALTER TABLE이라는 도구가 있어.

ALTER TABLE기존 테이블 구조를 바꿀 수 있게 해주는 명령어야. 이걸로 할 수 있는 건:

  • 새 컬럼 추가하기;
  • 필요 없는 컬럼 삭제하기;
  • 컬럼의 데이터 타입 바꾸기;
  • 테이블이나 컬럼 이름 바꾸기;
  • NOT NULL, UNIQUE 같은 제약조건 추가/삭제 등등.

비유하자면, 이미 집(테이블)을 지었는데 방(컬럼)을 새로 만들거나, 필요 없는 창고(컬럼)를 없애는 거랑 비슷해.

ALTER TABLE 문법

명령어 구조는 꽤 직관적이야:

ALTER TABLE 테이블
    변경_행동;

여기서:

  • 테이블 — 바꾸고 싶은 테이블 이름;
  • 변경_행동 — 실제로 하고 싶은 행동 (예: 컬럼 추가, 삭제, 데이터 타입 변경 등).

ALTER TABLE 사용 예시

새 컬럼 추가하기

테이블에 새 컬럼을 추가하고 싶으면 ADD COLUMN을 써. 예를 들어:

ALTER TABLE students
ADD COLUMN email VARCHAR(100);

이 명령어는 students 테이블에 email이라는 새 컬럼을 추가해. 여기엔 학생 이메일 주소가 들어가고, 데이터 타입은 최대 100글자짜리 문자열이야.

예를 들어, 학생 테이블을 만들었는데 입학 날짜를 깜빡하고 안 넣었을 수도 있지. 그럴 땐 이렇게 하면 돼:

ALTER TABLE students
ADD COLUMN enrollment_date DATE;

이제 enrollment_date 컬럼이 생겨서 입학 날짜를 저장할 수 있어.

컬럼 삭제하기

어떤 컬럼이 더 이상 필요 없으면 DROP COLUMN을 써. 예를 들어:

ALTER TABLE students
DROP COLUMN email;

이 명령어는 students 테이블에서 email 컬럼을 삭제해. 참고로 이 컬럼에 있던 데이터도 복구 불가로 같이 사라진다는 점 주의!

중요한 포인트:

만약 삭제하려는 컬럼이 다른 테이블에서(예: 외래키로) 쓰이고 있으면, PostgreSQL이 에러를 낼 수 있어. 이런 경우엔 먼저 의존성을 정리해야 해.

컬럼 데이터 타입 바꾸기

처음에 컬럼 데이터 타입을 잘못 정했을 수도 있지. 예를 들어, 학생 나이를 SMALLINT로 했다가 나중에 BIGINT로 바꾸고 싶을 때는 이렇게 해:

ALTER TABLE students
ALTER COLUMN age TYPE BIGINT;

중요한 포인트: 이미 데이터가 들어가 있으면 PostgreSQL이 새 타입으로 변환 가능한지 체크해. 불가능하면 에러가 나.

예를 들어, description 컬럼을 VARCHAR(100)으로 만들었는데, 나중에 코스 설명이 훨씬 길어질 수 있다는 걸 알게 됐어. 그럴 땐 데이터 타입을 TEXT로 바꿔:

ALTER TABLE courses
ALTER COLUMN description TYPE TEXT;

이제 코스 설명을 길이 제한 없이 저장할 수 있어.

컬럼 이름 바꾸기

컬럼 이름을 바꾸고 싶으면 RENAME COLUMN을 써:

ALTER TABLE students
RENAME COLUMN name TO full_name;

이제 name 컬럼이 full_name으로 바뀌었어.

테이블 이름 바꾸기

테이블 이름도 바꿀 수 있어. RENAME TO 명령어를 써:

ALTER TABLE students
RENAME TO university_students;

이제 students 테이블이 university_students로 이름이 바뀌었어.

NOT NULL 제약조건 추가/삭제

컬럼을 만들었는데 필수(NOT NULL)로 안 했을 수도 있지. 걱정 마! 나중에 제약조건을 추가할 수 있어:

ALTER TABLE students
ALTER COLUMN name SET NOT NULL;

NOT NULL 제약조건을 빼고 싶으면 DROP NOT NULL을 써:

ALTER TABLE students
ALTER COLUMN name DROP NOT NULL;

기본값 설정하기

이미 있는 컬럼에 기본값을 주고 싶으면 SET DEFAULT를 써:

ALTER TABLE enrollments
ALTER COLUMN enrollment_date SET DEFAULT CURRENT_DATE;

기본값을 없애고 싶으면 이렇게 해:

ALTER TABLE enrollments
ALTER COLUMN enrollment_date DROP DEFAULT;

각 명령어는 다음 세 번의 강의에서 더 자세히 다룰 거야. 기대해 :)

ALTER TABLE 쓸 때 흔한 실수

ALTER TABLE 쓸 때 에러가 날 수 있어. 대표적인 실수는 이거야:

현재 데이터랑 호환 안 되는 데이터 타입으로 바꾸려고 할 때. 예를 들어, age 컬럼에 이미 데이터가 있는데 이걸 VARCHAR로 바꾸려 하면 에러가 나. 해결법: 먼저 데이터를 지우거나 변환해.

외래키나 인덱스로 쓰이는 컬럼을 삭제하려고 할 때. PostgreSQL은 데이터 무결성을 위해 그냥 삭제 못 하게 막아. 의존 컬럼을 먼저 정리해야 해.

문법 실수. ALTER TABLE은 꽤 유연하지만 문법을 정확히 지켜야 해. 예를 들어, ADD COLUMN에는 데이터 타입이 꼭 들어가야 해.

실전에서 ALTER TABLE 쓰는 경우

실제로 ALTER TABLE은 진짜 자주 써. 예를 들면:

  • 기존 테이블에 새 데이터(컬럼 등) 추가할 때;
  • DB 최적화(예: 데이터 타입 바꿔서 메모리 절약)할 때;
  • 설계 실수 수정(예: 제약조건 빼먹거나 데이터 타입 잘못 정했을 때).

이제 ALTER TABLE이 얼마나 강력한지 알겠지? 프로젝트에서 변화에 대응할 수 있게 해주는 진짜 강력한 도구야. 중요한 건 — 항상 신중하게, 급하게 하지 말고, 괜히 "집" (네 테이블)을 망가뜨리지 않게 조심하자!

1
설문조사/퀴즈
테이블 생성의 기본, 레벨 17, 레슨 4
사용 불가능
테이블 생성의 기본
테이블 생성의 기본
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION