제약 조건 수정하기

제약 조건 수정하기 (Modifying constraints)

제약 조건을 만든 뒤에도 이름을 변경하거나 일부 속성을 바꿀 수 있어요. 다만 모든 것을 자유롭게 바꿀 수는 없고, 바꿀 수 있는 것과 없는 것이 나뉘어요. 이 페이지에서는 제약 조건을 어떤 방식으로 수정할 수 있는지, 그리고 어떤 제약 조건은 드롭 후 재생성해야 하는지 정리했어요.

출처: Snowflake SQL Reference

본문

제약 조건을 만든 뒤에는 다음과 같은 방식으로 수정할 수 있어요.

  • 제약 조건의 이름을 변경할 수 있어요.
  • 일부 속성은 수정할 수 있어요. 예를 들어 RELY 같은 속성이죠.
  • 일부 속성은 수정할 수 없어요. 예를 들어 DEFERRABLE 같은 속성이요. 이런 속성을 바꾸려면 제약 조건을 드롭(drop)한 뒤 다시 만들어야 해요.
  • 제약 조건의 컬럼 정의는 수정할 수 없어요. 예를 들어 새 컬럼 추가, 기존 컬럼 삭제, 컬럼 순서 변경 같은 것들이요. 이런 변경이 필요하면 제약 조건을 드롭 후 재생성해야 해요.

제약 조건을 수정할 때는 제약 조건 이름, 또는 제약 조건 정의의 컬럼들과 제약 조건 유형을 조합해 제약 조건을 식별해요. 기본 키(primary key)는 PRIMARY KEY 키워드로도 식별할 수 있는데, 각 테이블에는 PRIMARY KEY가 하나만 있을 수 있기 때문이에요.

제약 조건이 있는 테이블을 수정하면(예: 테이블 이름 변경, 다른 테이블과 스왑), 제약 조건도 변경 사항을 반영해 업데이트돼요.

제약 조건 이름 변경하기

제약 조건의 이름을 바꾸려면 ALTER TABLE 명령으로 다음 문법을 사용해요.

ALTER TABLE <table_name> RENAME CONSTRAINT <old_name> TO <new_name>;

제약 조건 속성 수정하기

제약 조건의 속성을 수정하려면 ALTER TABLE 명령으로 다음 문법을 사용해요.

ALTER TABLE <table_name>
  { ALTER | MODIFY } {
      CONSTRAINT <name>
    | PRIMARY KEY
    | { UNIQUE | FOREIGN KEY } (<column_name>, [ ... ] )
  }
  { [ [ NOT ] ENFORCED ] [ VALIDATE | NOVALIDATE ] [ RELY | NORELY ] };

CHECK 제약 조건의 경우 _constraint_name_이 필수예요. 또한 CHECK 제약 조건과 연결된 _expr_은 수정할 수 없어요. _expr_을 바꾸려면 CHECK 제약 조건을 드롭하고 다시 만들어야 해요.

현재 Snowflake는 다음 제약 조건 속성만 설정할 수 있어요.

  • [ NOT ] ENFORCED
  • NOVALIDATE 및 VALIDATE
  • RELY 및 NORELY

Snowflake는 ENFORCED 설정을 지원하지 않아요. 또한 NOVALIDATE는 CHECK 제약 조건에만 설정할 수 있어요. ENABLE과 VALIDATE 속성의 기본값이 아닌 값도 함께 참고해요.

제약 조건 속성에 대한 설명은 제약 조건 속성(Constraint properties)을 참고해요.

제약 조건이 있는 테이블 수정하기

제약 조건이 있는 테이블의 이름을 바꾸면, 그 테이블의 제약 조건과 그 테이블을 참조하는 모든 FOREIGN KEY 제약 조건이 새 이름을 참조하도록 업데이트돼요.

마찬가지로 테이블을 다른 테이블과 스왑하면, 기존 테이블과 그 테이블의 모든 제약 조건이 스왑된 테이블에 유지돼요.

테이블 이름 변경·스왑에 대한 자세한 내용은 ALTER TABLE을 참고해요.

더 알아보기 (Learn more)