次のスキーマを持つテーブルが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);
time
がNULL
であるレコードがないことを確認してください。そうでない場合は、制約を再作成できません。
次のように主キーを削除して再作成する必要があります。
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;