2012-01-18 39 views
13

Tôi có một vài ràng buộc không duy nhất mà tôi muốn thay đổi thành các ràng buộc duy nhất (quy tắc nghiệp vụ đã thay đổi kể từ khi mô hình dữ liệu được tạo). Có cách nào để làm điều đó với ra thả và tái tạo như một ràng buộc duy nhất? Tôi đã nghĩ rằng sẽ có một lựa chọn trong lệnh alter constraint, nhưng tôi đã không tìm thấy bất cứ điều gì.Thay đổi chỉ mục không độc lập thành chỉ mục duy nhất

Cảm ơn !!

Trả lời

2

Bạn không thể sửa đổi hạn chế theo cách bạn muốn, bạn chỉ có thể thả và tạo lại. Nếu bạn muốn làm điều này mà không có thời gian chết sau đó nhìn vào gói DBMS_REDEFINITION.

5

Bạn không thể chuyển đổi chỉ mục không duy nhất thành chỉ mục duy nhất. Tôi đang dựa vào câu trả lời này khi xem trang ALTER INDEX của Tham chiếu Ngôn ngữ SQL, tìm kiếm từ UNIQUE và không tìm thấy bất kỳ gợi ý nào có liên quan. Tôi đã xem xét 11g thay vào đó. 10g, nhưng có lẽ tốt hơn trong trường hợp này vì có một vài tính năng tồn tại trong 10g nhưng chỉ được ghi lại trong 11g.)

Tuy nhiên, bạn có thể sử dụng một chỉ mục không duy nhất cho một ràng buộc duy nhất. Nhưng có một số performance considerations: một chỉ mục duy nhất sẽ nhỏ hơn và nhanh hơn.

create table my_table(a number); 

create index my_table_index on my_table(a); 

alter table my_table add constraint my_table_unique unique (a) 
    using index my_table_index; 
2

Trong trường hợp của tôi, chỉ cần thả và tái tạo chỉ mục:

DROP INDEX index_name; 
CREATE UNIQUE INDEX index_name ON table_name (col01,col02) TABLESPACE indx; 
Các vấn đề liên quan