1.해당하는 PK를 삭제한다 2.변경하고자 하는 COLUMN으로 Unique Index를 생성한다. 3.PK에 속성을 추가한다. ----------------------------------------------------------------------------- -- PK 제거하기 Alter TABLE 테이블이름 drop primary key cascade --PK추가 하기 ALTER TABLE 테이블이름 ADD CONSTRAINT 인덱스 이름 PRIMARY KEY(field1, field2) ----------------------------------------------------------------------------- 1. PK INDEX Create ALTER TABLE TABLE_NAME 2. INDEX Create CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(PK_1, PK_2, PK_3) TABLESPACE TABLESPACE_NAME STORAGE ( INITIAL 5M NEXT 5M PCTINCREASE 0 ); 3. PK_INDEX Drop ALTER TABLE TABLE_NAME DROP CONSTRAINT INDEX_NAME; 4. INDEX Drop DROP INDEX INDEX_NAME; 오라클에서 다음과 같은 상황에 대해 DB를 어떻게 변경하는지에 대해 포스팅하고자 한다. 상황 : 이상의 상황에서 다음 단계를 밟아 원하는 DB를 새롭게 구성할수 있다. (1) 현재 사용하고 있는 3개의 PK를 삭제한다. TB_MEMBER라는 테이블에서 현재 사용하고 있는 PK들이 삭제된다. PK라는 속성이 제거되는것이지 해당 칼럼 자체가 삭제되는 것은 아니다. ALTER TABLE TB_MEMBER DROP PRIMARY KEY; (2) 새로운 PK로 사용할 칼럼을 추가한다. 새로 추가될 칼럼인 RSV_SEQ를 추후 PK로 사용하게 될 것이고 이 칼럼은 auto increment되는 값을 갖게 될 칼럼이다. 그러나 지금의 시점에서는 단지 새로운 칼럼을 하나 추가하는 것 뿐이다. ALTER TABLE TB_MEMBER ADD(RSV_SEQ NUMBER); (3) PK로 사용하게 될 새로 추가할 칼럼의 검색 속도를 높이기 위해 index를 생성한다. CREATE UNIQUE INDEX TB_MEMBER_PK ON TB_MEMBER(RSV_SEQ); (4) 새로 추가하게 될 PK 칼럼이 auto increment이므로 이에 대한 sequence를 생성한다. 오라클은 MySQL과 달리 해당 칼럼에 직접 auto_increment 속성을 지정할수가 없어서 별도의 시퀀서를 만들어 사용해야 한다. sequence의 이름은 TB_MEMBER_SEQ이고 1부터 1씩 자동 증가하는 방식의 sequence이다. CREATE SEQUENCE TB_MEMBER_SEQ START WITH 1 INCREMENT BY 1; (5) 이상의 과정까지에서 PK로 사용하게 될 새로운 칼럼에는 아래와 같이 모두 null이 들어 있을 것이다. --------------------------------- (6) 이제 비로소 새로 생성한 칼럼을 PK로 설정할수 있다. 아래와 같이 ALTER TABLE TB_MEMBER ADD CONSTRAINT TB_MEMBER_PK PRIMARY KEY(RSV_SEQ); 테스트 단계이거나 개발 단계에서 기존 적재되어 있는 데이터를 모두 날려 버리고 테이블을 새로 생성할수 있다면 굳이 위와 같은 다소 복잡한 과정 필요없이 그냥 drop table ... |