web-dev-qa-db-ja.com

主キーの変更

次のスキーマを持つテーブルがOracleにあります。

City_ID  Name  State  Country  BuildTime  Time

テーブルを宣言したとき、主キーは両方ともCity_IDBuildTimeが、主キーを3列に変更したい:

City_ID  BuildTime  Time

主キーを変更するにはどうすればよいですか?

42
Mohit BAnsal

テーブル名がcityで、既存の主キーがpk_city、次のことができるはずです。

ALTER TABLE city
DROP CONSTRAINT pk_city;

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

timeNULLであるレコードがないことを確認してください。そうでない場合は、制約を再作成できません。

69
Peter Lang

次のように主キーを削除して再作成する必要があります。

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;
38
Tony Andrews