[Oracle SQL] 오라클 기본키의 삭제 수정 하는 방법

2021-02-20


기존의 기본키가 정해진 테이블에 기본키를 삭제해야 하거나 변경을 해야 하는 경우가 있는데, 이럴 경우 어떠한 방식으로 해당 기본키를 삭제하고 재설정할 수 있는지 알아보도록 하자.


- 예제 

 

기존의 기본키를 생성하던 테이블을 다시 재활용하여 사용하겠다. 

 

CREATE TABLE INFO (
    INFONO NUMBER CONSTRAINT PKINFONO PRIMARY KEY,
    NAME VARCHAR2(10),
    AGE NUMBER
);

 

기존의 예제와 다른 점은 CONSTRAINT 키워드가 추가된 점이다. 이는 제약조건에 명시적인 이름을 부여함으로써 선언된 제약조건을 조금 더 쉽게 관리할 수 있도록 도움을 주게 된다. 사용방법으로는 제약조건을 적용하기 전 제일 앞에 CONSTRAINT를 붙여준 후 그 뒤에 제약조건명 + 제약조건 순으로 코드를 작성하면 된다. (물론 제약조건 명을 개발자가 명시하지 않아도 ORACLE 측에서 자동으로 만들어주지만, 이는 따로 확인해야하기 때문에 번거롭다.)

 

이후 테이블의 제약조건을 확인하면 테이블 생성에서 만든 제약조건명과 함께 기본키로 설정되어 있는 것을 확인할 수 있다.


- 기본키 제거

 

기존의 기본키 INFONO를 제거하고 새롭게 NAME을 기본키로 설정해 보도록 하자. 이 역시 ALTER 구문을 이용해서 제거할 수 있는데 코드는 아래와 같다. 

 

ALTER TABLE INFO DROP CONSTRAINT PKINFONO;

 

여기서 바로 제약조건명을 정한 이유가 나타난다. 바로 제약조건명을 DROP을 이용해 제거해주면 제약조건으로 설정되어 있던 기본키가 제거되게 된다.


- 기본키 재설정

 

이제 NAME을 기본키로 설정하는 코드이다. 이미 만들어둔 테이블이기 때문에 ALTER구문을 통해 바꾸어 줄 수 있다. 코드는 아래와 같다.

 

ALTER TABLE INFO ADD CONSTRAINT PKNAME PRIMARY KEY(NAME);

 

코드 실행시 정상적으로 NAME이 PRIMARY KEY로 선언된 것을 확인할 수 있다. 

 


- 번외 DISABLE

 

ALTER TABLE INFO DISABLE PRIMARY KEY;

 

추가적으로 DISABLE을 통해 기본키를 비사용으로 바꿀 수도 있는데, 이는 일시적인 기본키의 비활성화로 기본키가 제거되지 않고 그대로 남아있다. 

 

ALTER TABLE INFO ADD CONSTRAINT PKNAME PRIMARY KEY(NAME);

 

때문에 DISABLE을 통해 기존의 기본키를 비활성화시켜두고 전의 ALTER 구문을 통해 기본키를 변경하려면 에러가 발생하게 된다. 에러 구문은 아래와 같다.

 

 

오류구문을 확인해보면 기존의 기본키가 제거되지 않아 새로운 기본키를 추가할 수 없다는 내용이다. 때문에 기본키를 변경하기 위해서는 반드시 DROP을 이용해 기존의 기본키를 삭제하는 작업이 필요하다.