将唯一索引更改为唯一索引

时间:2012-01-18 21:01:15

标签: oracle oracle10g constraints unique-constraint

我有一些非唯一约束,我想要改变为唯一约束(业务规则自数据模型制定以来已经改变)。有没有办法在删除和重新创建作为唯一约束的情况下执行此操作?我原以为alter constraint命令会有一个选项,但我没找到任何东西。

谢谢!

3 个答案:

答案 0 :(得分:5)

您无法将非唯一索引转换为唯一索引。

(很难说不能做什么。我的答案是基于查看SQL语言参考的ALTER INDEX页面,搜索单词UNIQUE,而不是找到任何相关的提示。我看了在11g而不是10g,但在这种情况下可能更好,因为10g中存在一些特征,但仅记录在11g中。)

但是,您可以为唯一约束使用非唯一索引。但是有一些performance considerations:唯一的索引会更小更快。

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;

答案 1 :(得分:3)

您无法以您希望的方式修改约束,只能删除并重新创建约束。如果您想在没有停机的情况下执行此操作,请查看DBMS_REDEFINITION包。

答案 2 :(得分:3)

就我而言,只需删除并重新创建索引:

DROP INDEX index_name;
CREATE UNIQUE INDEX index_name ON table_name (col01,col02) TABLESPACE indx;