programing

기본 키 변경

goodsources 2023. 2. 14. 20:14
반응형

기본 키 변경

Oracle에 다음 스키마를 가진 테이블이 있습니다.

City_ID  Name  State  Country  BuildTime  Time

테이블을 선언했을 때 나의 주요 키는 둘 다였다.City_ID및 그BuildTime단, 프라이머리 키를 다음 3개의 컬럼으로 변경합니다.

City_ID  BuildTime  Time

프라이머리 키를 변경하려면 어떻게 해야 하나요?

테이블명이city기존 프라이머리 키는pk_city다음 작업을 수행할 수 있습니다.

ALTER TABLE city
DROP CONSTRAINT pk_city;

ALTER TABLE city
ADD CONSTRAINT pk_city PRIMARY KEY (city_id, buildtime, time);

다음 장소의 레코드가 없는지 확인합니다.timeNULL그렇지 않으면 제약조건을 다시 작성할 수 없습니다.

다음과 같이 프라이머리 키를 드롭하고 다시 작성해야 합니다.

alter table my_table drop constraint my_pk;
alter table my_table add constraint my_pk primary key (city_id, buildtime, time);

단, 이 프라이머리 키를 참조하는 외부 키가 있는 다른 테이블이 있는 경우 먼저 해당 테이블을 삭제하고 위의 작업을 수행한 후 새 열 목록을 사용하여 외부 키를 다시 작성해야 합니다.

기존 기본 키를 삭제하는 대체 구문(예: 제약 조건 이름을 모르는 경우)

alter table my_table drop primary key;

다음 단계를 수행할 때 다음과 같은 경우가 있습니다.

 alter table my_table drop constraint my_pk; 
 alter table my_table add constraint my_pk primary key (city_id, buildtime, time);

마지막 스테이트먼트가 에 실패합니다.

ORA-00955 "이름은 기존 객체에 의해 이미 사용되고 있습니다"

Oracle은 보통 my_pk라는 이름의 고유한 인덱스를 만듭니다.이 경우 제약 조건이 여전히 적절한지 여부에 따라 고유 인덱스를 삭제하거나 이름을 변경할 수 있습니다.

프라이머리 키 제약 조건과 고유 인덱스의 폐기를 단일 SQL 문에 결합할 수 있습니다.

alter table my_table drop constraint my_pk drop index; 

ORA-00955 "name is are used by existing object" 체크해주세요.

언급URL : https://stackoverflow.com/questions/2310561/change-primary-key

반응형