web-dev-qa-db-fra.com

Modifier la clé primaire

J'ai une table dans Oracle qui a le schéma suivant:

City_ID  Name  State  Country  BuildTime  Time

Lorsque j'ai déclaré la table, ma clé primaire était à la fois City_ID et le BuildTime mais maintenant je veux changer la clé primaire en trois colonnes:

City_ID  BuildTime  Time

Comment puis-je changer la clé primaire?

42
Mohit BAnsal

En supposant que le nom de votre table est city et que votre clé primaire existante est pk_city, vous devriez pouvoir effectuer les opérations suivantes:

ALTER TABLE city
DROP CONSTRAINT pk_city;

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

Assurez-vous qu'il n'y a pas d'enregistrements où time est NULL, sinon vous ne pourrez pas recréer la contrainte.

69
Peter Lang

Vous devrez supprimer et recréer la clé primaire comme ceci:

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

Cependant, s'il existe d'autres tables avec des clés étrangères qui référencent cette clé primaire, vous devrez d'abord les supprimer, faire ce qui précède, puis recréer les clés étrangères avec la nouvelle liste de colonnes.

Une syntaxe alternative pour supprimer la clé primaire existante (par exemple, si vous ne connaissez pas le nom de la contrainte):

alter table my_table drop primary key;
38
Tony Andrews