기존 테이블에 PRIMARY KEY 추가

sylvie·2022년 1월 17일
0

ORACLE

목록 보기
5/6

PRIMRY KEY추가하기

ALTER TABLE 테이블명 ADD PRIMARY KEY(칼럼명):

✔️ 주의
단, 기존 테이블에 이미 PRIMARY KEY가 존재한다면, 기존테이블의 PRIMARY KEY를 제거후 PRIMARY KEY를 다시 추가해줘야 한다.
이 경우의 방법은 아래와 같다.

기존테이블의 PRIMRY KEY제거 후 PRIMARY KEY 추가하기

1. 테이블의 기존 PRIMARY KEY 삭제

ALTER TABLE 테이블명 DROP PRIMARY KEY

1) 항상 인덱스와 제약조건을 한번에 삭제하고 싶을 때

ALTER TABLE 테이블명 DROP PRIMARY KEY DROP INDEX;

2) 항상 제약조건만 삭제하고 인덱스는 남겨 놓고 싶을 때

ALTER TABLE 테이블명 DROP PRIMARY KEY KEEP INDEX;

참고) Primary Key 제약조건을 ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명; 으로 제거를 해도 인덱스와 제약조건이 동시에 생성된 Primary Key라면 인덱스도 함게 삭제가 됩니다.

✔️ 유의할 점
Primary key를 생성하는 방법에 따라 제약조건과 인덱스가 모두 삭제가 될때도 있고,
또는 제약조건만 삭제가 되고 인덱스는 그대로 남아 있는 경우가 발생 한다는 것입니다.
이런한 상황이 발생하는 원인은 Primary Key를 생성하는 방법때문이다.
Primary Key를 생성할때 인덱스와 제약조건을 동시에 생성하면 삭제할 때도 동시에 삭제가 되고 이미 생성된 인덱스를 사용해서 Primary Key를 생성하면, 위 구문 수행시 제약조건만 삭제가 되고 인덱스는 남아 있게 된다.
필자는 Primary key 제약조건이 삭제되었는데도 불구하고, 인덱스가 그대로 남아 있어 '무결성제약조건'에러가 발생하였다.
그러므로 위의 옵션을 무조건 추가해서 작업하도록 하면 장애를 방지할 수 있다.

✔️ 주의
기존 PK를 다른 테이블에서 FK로 참고하는 경우
'ALTER TABLE 테이블명 DROP PRIMARY KEY'를 실행했을 때 아래와 같은 에러가 발생한다.

오류 보고 -
ORA-02273: 고유/기본 키가 외부 키에 의해 참조되었습니다
02273. 00000 -  "this unique/primary key is referenced by some foreign keys"
*Cause:    Self-evident.
*Action:   Remove all references to the key before the key is to be dropped.

그러므로 이 테이블의 PK를 FK로 참고하는 테이블의 FK제약조건을 제거 후 진행해야한다.
PK를 다시 생성한 후에 제거한 FK제약조건은 반드시 다시 생성해줘야한다.

참고) FK제약조건 제거
aalter table [테이블명] drop foreign key [제약조건명];
참고) 특정테이블을 참조한 테이블 찾는 방법
SELECT 
	fk.owner, fk.constraint_name , fk.table_name 
FROM all_constraints fk, all_constraints pk 
WHERE fk.R_CONSTRAINT_NAME = pk.CONSTRAINT_NAME 
AND pk.owner = '계정명' 
AND fk.CONSTRAINT_TYPE = 'R' 
AND pk.TABLE_NAME = '테이블명' 
ORDER BY fk.TABLE_NAME

2. 테이블에 기존 키 컬럼과 새로 추가할 컬럼을 다시 PRIMARY KEY로 지정

ALTER TABLE 테이블명 ADD PRIMARY KEY(기존컬럼명,추가컬럼명)

참조

https://dev4u.tistory.com/873 [데브포유]

0개의 댓글