제약 조건 삭제하기
제약 조건 삭제하기 (Dropping constraints)
제약 조건은 ALTER TABLE 명령으로 삭제할 수 있어요. 이 페이지에서는 제약 조건을 직접 드롭하는 방법, 컬럼과 함께 드롭하는 방법, 그리고 테이블·스키마·데이터베이스를 드롭할 때 제약 조건이 어떻게 처리되는지 설명해요. 특히 CASCADE와 RESTRICT 옵션의 차이를 이해하는 게 중요해요.
본문
제약 조건은 다음 ALTER TABLE 명령으로 드롭해요.
- ALTER TABLE … DROP CONSTRAINT는 지정한 제약 조건을 명시적으로 드롭해요. 제약 조건 수정과 마찬가지로, 제약 조건 이름이나 컬럼 정의와 제약 조건 유형을 조합해 식별할 수 있어요. 기본 키의 경우 PRIMARY KEY 키워드로도 식별할 수 있어요.
- ALTER TABLE … DROP COLUMN은 컬럼과 그와 연결된 제약 조건을 드롭해요.
기본적으로 primary 또는 unique 키를 드롭하면, 그 키를 참조하는 모든 foreign key도 함께 드롭돼요. 단, RESTRICT 드롭 옵션을 지정하면 예외예요.
제약 조건은 연결된 테이블, 스키마, 데이터베이스가 드롭될 때도 함께 드롭돼요. DROP 명령은 CASCADE | RESTRICT 드롭 옵션을 지원해요.
Note
UNDROP 명령으로 드롭된 테이블, 스키마, 데이터베이스를 복원할 수 있어요. 그러나 드롭된 컬럼과 제약 조건은 복원할 수 없어요.
제약 조건 드롭하기
ALTER TABLE … DROP CONSTRAINT 명령으로 UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK 제약 조건을 명시적으로 드롭할 수 있어요.
ALTER TABLE <table_name> DROP { CONSTRAINT <name> | PRIMARY KEY | { UNIQUE | FOREIGN KEY } (<column>, [ ... ] ) } [ CASCADE | RESTRICT ]
이 제약 조건들 중 FOREIGN KEY 제약 조건이나, foreign key 참조가 없는 primary·unique 키 제약 조건을 드롭할 때는 제약 조건이 직접 드롭돼요.
기본 드롭 옵션은 CASCADE예요. 즉 foreign key 참조가 있는 unique나 primary 키를 드롭하면, 그 키를 참조하는 모든 foreign key도 함께 드롭된다는 뜻이에요.
RESTRICT 드롭 옵션을 지정하면, 드롭하려는 키를 참조하는 foreign key가 존재할 때 오류가 반환돼요.
컬럼 드롭하기
ALTER TABLE … DROP COLUMN으로 컬럼을 드롭하는 것은 제약 조건을 드롭하는 것과 비슷하게 동작해요.
ALTER TABLE <table_name> DROP COLUMN <name> [ CASCADE | RESTRICT ]
PRIMARY KEY, UNIQUE, FOREIGN KEY 제약 조건의 기본 드롭 옵션은 CASCADE예요. 즉 드롭되는 컬럼을 포함하는 모든 제약 조건도 함께 드롭된다는 뜻이에요. 해당 컬럼을 포함하는 primary나 unique 키를 다른 FOREIGN KEY 제약 조건이 참조하고 있다면, 참조하는 모든 foreign key가 드롭돼요. RESTRICT 옵션을 지정하면, 컬럼에 foreign key 참조가 있는 primary나 unique 키가 있을 때 오류가 반환돼요. 이 경우 드롭 명령은 드롭되는 컬럼에 정의되거나 컬럼을 참조하는 제약 조건이 없을 때만 성공해요.
단일 컬럼을 참조하는 CHECK 제약 조건의 기본 드롭 옵션은 CASCADE예요. 하지만 여러 컬럼을 참조하는 CHECK 제약 조건의 기본 드롭 옵션은 RESTRICT인데, 데이터 무결성에 필요할 수 있는 제약 조건이 실수로 삭제되는 것을 막기 위해서예요.
테이블, 스키마, 데이터베이스 드롭하기
DROP 명령은 지정한 테이블, 스키마, 데이터베이스를 드롭하며, 객체와 연결된 모든 제약 조건도 함께 드롭되도록 지정할 수 있어요.
DROP { TABLE | SCHEMA | DATABASE } <name> [ CASCADE | RESTRICT ]
컬럼과 제약 조건을 드롭할 때와 마찬가지로 CASCADE가 기본 드롭 옵션이고, 드롭되는 객체에 속하거나 객체를 참조하는 모든 제약 조건도 함께 드롭돼요.
예를 들어 데이터베이스를 드롭할 때, 그 데이터베이스에 다른 데이터베이스의 foreign key가 참조하는 primary나 unique 키가 있다면, 참조하는 foreign key들도 함께 드롭돼요.
객체를 나중에 언드롭(undrop)하면, 이전에 드롭되었던 관련 제약 조건들이 모두 복원돼요.
RESTRICT 옵션을 지정하면, 객체 아래의 어떤 PRIMARY KEY나 UNIQUE 제약 조건에 foreign key 참조가 있을 때 오류가 반환돼요.
더 알아보기 (Learn more)
- 제약 조건 개요 — 제약 조건의 기본 개념과 유형
- 제약 조건 만들기 — 제약 조건 정의
- 제약 조건 수정하기 — 기존 제약 조건 변경
- ALTER TABLE — 테이블 수정 명령