2010-02-22 47 views
33

Tôi có một bảng trong Oracle đã sau Schema:Change Primary Key

City_ID Name State Country BuildTime Time 

Khi tôi tuyên bố bảng khóa chính của tôi là cả hai City_IDBuildTime nhưng bây giờ tôi muốn thay đổi khóa chính để ba cột :

City_ID BuildTime Time 

Làm cách nào để thay đổi khóa chính?

Trả lời

57

Giả sử rằng tên bảng của bạn là city và Primary Key hiện tại của bạn là pk_city, bạn sẽ có thể làm như sau:

ALTER TABLE city 
DROP CONSTRAINT pk_city; 

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

Hãy chắc chắn rằng không có hồ sơ, nơi timeNULL, nếu không bạn thắng không thể tái tạo ràng buộc.

33

Bạn sẽ cần phải thả và tái tạo các khóa chính như thế này:

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

Tuy nhiên, nếu có bảng khác với các phím nước ngoài mà tham khảo khóa chính này, sau đó bạn sẽ cần phải thả những người đầu tiên , làm như trên, và sau đó tạo lại các khóa ngoại với danh sách cột mới.

Một cú pháp thay thế để thả các khóa chính hiện tại (ví dụ: nếu bạn không biết tên hạn chế):

alter table my_table drop primary key; 
+0

khóa chính của tôi là một sự kết hợp của city_id và buildtime vì vậy những gì nên viết ở vị trí của my_pk –

+0

Tôi đã sử dụng "my_pk" làm tên của ràng buộc khóa chính. Bạn nên biết tên của ràng buộc là gì, nhưng nếu bạn không, bạn có thể sử dụng "thay đổi bảng my_table thả khóa chính;" thay thế. –

+8

Không cần phải thả các khóa ngoại lệ phụ thuộc vào tham chiếu my_table.my_pk nếu một từ khóa rơi xuống bằng mệnh đề CASCADE. Ngoài ra, chỉ cần thả các ràng buộc có thể giữ một chỉ số xung quanh bạn có thể hoặc có thể không muốn; sử dụng KEEP | Mệnh đề DROP INDEX cho phù hợp. Rất kỳ quặc, tất cả điều này được ghi lại trong Tham chiếu SQL cơ sở dữ liệu Oracle. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_3001.htm#i2103845 –

Các vấn đề liên quan