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