Изменить первичный ключ - PullRequest
42 голосов
/ 22 февраля 2010

У меня есть таблица в Oracle, которая имеет следующую схему:

City_ID  Name  State  Country  BuildTime  Time

Когда я объявил таблицу, мой первичный ключ был City_ID и BuildTime, но теперь я хочу изменить первичный ключ на три столбца:

City_ID  BuildTime  Time

Как мне изменить первичный ключ?

Ответы [ 2 ]

68 голосов
/ 22 февраля 2010

Предполагая, что имя вашей таблицы 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, иначе вы не сможете заново создать ограничение.

37 голосов
/ 22 февраля 2010

Вам нужно будет удалить и заново создать первичный ключ, например:

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;
...