Изменить неуникальный индекс на уникальный индекс - PullRequest
13 голосов
/ 19 января 2012

У меня есть несколько неуникальных ограничений, которые я хочу изменить на уникальные ограничения (бизнес-правила изменились с момента создания модели данных). Есть ли способ сделать это без исключения и воссоздания в качестве уникального ограничения? Я думал, что в команде alter constraint будет опция, но я ничего не нашел.

Спасибо !!

Ответы [ 3 ]

5 голосов
/ 19 января 2012

Вы не можете преобразовать неуникальный индекс в уникальный индекс.

(Трудно сказать, что нельзя сделать. Я основываю этот ответ на просмотре страницы ALTER INDEX Справочника по языку SQL, поиске слова UNIQUE и отсутствии намеков Я посмотрел на 11g вместо 10g, но это, вероятно, лучше в этом случае, потому что есть несколько функций, которые существуют в 10g, но документированы только в 11g.)

Однако вы можете использовать неуникальный индекс для ограничения уникальности. Но есть некоторые соображения производительности : уникальный индекс будет меньше и быстрее.

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;
3 голосов
/ 22 июня 2015

В моем случае просто удалите и заново создайте индекс:

DROP INDEX index_name;
CREATE UNIQUE INDEX index_name ON table_name (col01,col02) TABLESPACE indx;
3 голосов
/ 19 января 2012

Вы не можете изменить ограничение так, как вы хотите, вы можете только удалить его и создать заново.Если вы хотите сделать это без простоев, посмотрите в пакет DBMS_REDEFINITION .

...