2010-02-22 24 views
33

ich eine Tabelle in Oracle haben die folgenden Schema hat:ändern Primärschlüssel

City_ID Name State Country BuildTime Time 

Wenn ich die Tabelle meine Primärschlüssel deklariert war sowohl City_ID und die BuildTime aber jetzt habe ich den Primärschlüssel zu drei Spalten ändern möchten :

City_ID BuildTime Time 

Wie kann ich den Primärschlüssel ändern?

Antwort

57

Unter der Annahme, dass Ihr Tabellenname ist city und Ihre vorhandenen Primärschlüssel ist pk_city, sollten Sie in der Lage sein, Folgendes zu tun:

ALTER TABLE city 
DROP CONSTRAINT pk_city; 

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

Stellen Sie sicher, dass es keine Aufzeichnungen gibt, wo timeNULL ist, sonst hat man Die Einschränkung kann nicht neu erstellt werden.

33

Sie müssen löschen und neu erstellen den Primärschlüssel wie folgt aus:

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

jedoch, wenn andere Tabellen mit Fremdschlüsseln, die diesen Primärschlüssel verweisen, dann müssen Sie die zuerst fallen Führen Sie die obigen Schritte aus, und erstellen Sie die Fremdschlüssel mit der neuen Spaltenliste neu.

Eine alternative Syntax, um die vorhandenen Primärschlüssel (zB wenn Sie den Namen des Constraints nicht wissen) fallen zu lassen:

alter table my_table drop primary key; 
+0

meine Primärschlüssel ist eine Kombination aus city_id und Buildtime so was an Ort und Stelle schreiben soll my_pk –

+0

Ich verwendete "my_pk" als den Namen der Primärschlüsseleinschränkung. Sie sollten wissen, wie der Name der Einschränkung lautet, aber wenn nicht, können Sie "alter table my_table drop primary key" verwenden. stattdessen. –

+8

Man muss keine abhängigen Fremdschlüssel löschen, die my_table.my_pk referenzieren, wenn man sie mit der CASCADE-Klausel löscht. Auch wenn Sie die Einschränkung einfach fallen lassen, kann es sein, dass Sie einen Index um sich haben oder auch nicht; Verwende den KEEP | DROP INDEX-Klausel entsprechend. Seltsamerweise ist all dies in der Oracle Database SQL Reference dokumentiert. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_3001.htm#i2103845 –

Verwandte Themen