是否可以命名在oracle中创建主键期间创建的索引?

时间:2016-01-06 11:26:05

标签: oracle indexing primary-key

据我所知,在创建主键期间:

a)如果主键字段或其组合上没有索引,Oracle会在prmary键字段上创建新索引

b)如果主键字段或其组合上存在多个索引但未指定索引,则Oracle使用prmary key字段中的一个索引

c) Oracle使用索引,如果主键字段上存在任何索引或指定了其组合和索引名称

d) Oracle在主键字段上使用一个索引,如果主键字段上只存在一个索引,或者其组合甚至没有指定索引

请建议使用CREATE TABLE语句本身为oracle创建的索引设置名称,如果是(a)!

2 个答案:

答案 0 :(得分:2)

默认情况下,索引的名称与约束的名称相同:

CREATE TABLE tbl (ID NUMBER CONSTRAINT pk_tbl PRIMARY KEY);

约束命名是可选的,这就是为什么约束和隐式创建的索引都可以获得系统生成的名称。

您可以使用

指定索引名称
CREATE TABLE tbl (ID NUMBER CONSTRAINT pk_tbl PRIMARY KEY USING INDEX (CREATE UNIQUE INDEX my_pk_index ON tbl(ID)));

答案 1 :(得分:0)

以下是名称为

的示例
CREATE TABLE regions
   ( region_id NUMBER NOT NULL,
   region_name VARCHAR2(25),
   constraint regions_pk primary key (region_id)
   );
  

a)如果没有索引,Oracle会在prmary key字段上创建新索引   主键字段或其组合

创建表时,不会有任何索引。首先,它将创建表,然后使用该索引创建索引和主键。

  

b)如果有任何索引,Oracle会使用prmary key字段中的一个索引   存在于主键字段或其组合上,但索引不存在   指定的

如果主键列上已有表和多个索引,并且想要创建主键,则需要指定using子句并传递要使用的索引。如果只有一个索引,那么它将自动使用该索引。

  

c)如果主键字段上存在任何索引,Oracle将使用索引   或指定其组合和索引名称

这是对的。如果是多个索引,您可以使用USING子句指定。