我在db补丁中看到了以下语句:
ALTER TABLE tablename ADD PRIMARY KEY (somepk_columnname) USING INDEX;
我想查看USING INDEX在这里做了什么,但只是从谷歌那里得到的,它允许我指定一些存储特定的东西等。
我的问题是,完全在这里发生了什么? db在这里使用了一些默认值吗?在默认表空间中为PK创建索引?我认为每个默认值为每个pk创建一个索引......
答案 0 :(得分:2)
http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm#SQLRF52209
使用索引实施约束
定义唯一或主键约束的状态时,您可以 指定Oracle用于强制执行约束的索引,或者您 可以指示Oracle创建用于强制执行的索引 约束
using_index_clause您只能在指定using_index_clause时使用 启用唯一或主键约束。你可以指定 using_index_clause的任何顺序的子句,但您可以指定 每个条款只有一次。
如果指定schema.index,则Oracle会尝试使用指定的索引强制执行约束。如果Oracle找不到索引 或者不能使用索引来强制执行约束,然后Oracle返回 错误。
如果指定create_index_statement,则Oracle会尝试创建索引并使用它来强制执行约束。如果是Oracle 无法创建索引或无法使用索引来强制执行 约束,然后Oracle返回错误。
如果既未指定现有索引也未创建新索引,则Oracle会创建索引。在这种情况下:
索引接收与约束相同的名称。
如果对表进行了分区,则可以为唯一键或主键约束指定本地或全局分区索引。
答案 1 :(得分:1)
上面的回复非常有用,但我也想使用特定的表空间来获取我的唯一键。这对我有用:
alter table tablename add constraint uk_name unique (col1, col2) using index tablespace tablespace_name;