오라클 테이블, 무결성 제약조건의 삭제
ALTER TABLE ~ DROP CONSTRAINT 명령으로 제약조건을 삭제 할 수 있습니다. 편리하게 삭제를 위해서는 이렇게 삭제할 가능성이 있는 제약조건들은 이름을 직접 부여해서 생성해 놓는것이 좋습니다.
부모 테이블의 기본 키를 삭제하는 경우 자식 테이블에 외래 키가 걸려 있으면 오류가 발생합니다. 이 경우 자식 테이블의 외래 키를 먼저 삭제하거나 제약조건 삭제시 CASCADE 옵션을 이용하여 삭제가 가능합니다.
제약조건을 삭제하는 명령어 기본 형식은 다음과 같습니다.
[기본 형식]
ALTER TABLE table_name DROP CONSTRAINT constraint_name [CASCADE] |
기본키 제약조건을 삭제해 봅니다.
자식테이블에 기본키가 내려가 있을 때 부모테이블의 기본키는 삭제할 수 없음을 확인하고 부모테이블의 기본키를 삭제하면서 자식테이블의 외래키도 동시에 삭제해 보겠습니다. 또한 CUSTOMER 테이블의 gender 컬럼에 걸린 CHECK 제약조건도 삭제해 보겠습니다.
실습
고객(CUSTOMER) 테이블의 기본 키를 삭제합니다. |
ALTER TABLE CUSTOMER DROP PRIMARY KEY;
<실행결과>
ORA-02273: 고유/기본 키가 외부 키에 의해 참조되었습니다
CUSTOMER 테이블의 기본키인 id 컬럼은 SALES 테이블의 customer_id 외래키 컬럼에 참조되어 있으므로 기본적으로 삭제 불가능 합니다.
CASCADE 옵션을 사용해 부모 테이블의 기본 키와 자식 테이블의 외래 키를 동시에 삭제해 봅시다.
CUSTOMER 테이블의 기본키와 SALES 테이블의 외래 키도 같이 삭제 합시다. |
ALTER TABLE CUSTOMER DROP PRIMARY KEY CASCADE;
<실행결과>
Table CUSTOMER이(가) 변경되었습니다.
두 테이블의 제약조건을 조회해보겠습니다. |
SELECT TABLE_NAME,CONSTRAINT_NAME, CONSTRAINT_TYPE, SEARCH_CONDITION
FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN ('CUSTOMER','SALES');
<실행결과>
| TABLE_NAME | CONSTRAINT_NAME | CONSTRAINT_TYPE | SEARCH_CONDITION |
1 | CUSTOMER | SYS_C007522 | C | "NAME" IS NOT NULL |
2 | CUSTOMER | SYS_C007538 | C | gender IN ('M', 'F') |
3 | SALES | SYS_C007536 | P | (null) |
CUSTOMER 테이블의 기본 키와 SALES 테이블의 외래 키가 삭제되었습니다.
ALTER TABLE ~ DROP CONSTRAINTS 명령으로 제약조건을 삭제해 보겠습니다.
CUSTOMER 테이블의 gender 컬럼에 걸린 CHECK 제약조건을 삭제하세요. 삭제할 제약조건의 이름은 gender 컬럼의 CHECK 제약조건에 대해 바로 앞에서 실행한 쿼리 실행결과의 CONSTRAINT_NAME 값을 기술해야 합니다. |
ALTER TABLE CUSTOMER DROP CONSTRAINTS SYS_C007538;
<실행결과>
Table CUSTOMER이(가) 변경되었습니다.
#무결성제약조건, #오라클, #테이블, #제약조건삭제, #테이블, #ORACLE
댓글 없음:
댓글 쓰기