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

Posted

技术标签:

【中文标题】是否可以命名在 oracle 中创建主键期间创建的索引?【英文标题】:Is it possible to name index that is created during primary key creation in oracle? 【发布时间】:2016-01-06 11:26:05 【问题描述】:

据我了解,在创建主键期间:

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

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

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

d) 如果主键字段上仅存在一个索引或其组合,即使未指定索引,Oracle 使用一个主键字段索引

请建议将 name 设置为 oracle 使用 CREATE TABLE 语句本身创建的索引的可能性,以防万一!

【问题讨论】:

【参考方案1】:

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

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)));

【讨论】:

【参考方案2】:

下面是带有名字的例子:

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

a) 如果在主键字段上不存在索引,Oracle 在主键字段上创建新索引 主键字段或其组合

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

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

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

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

没错。如果有多个索引,您可以使用USING 子句指定。

【讨论】:

以上是关于是否可以命名在 oracle 中创建主键期间创建的索引?的主要内容,如果未能解决你的问题,请参考以下文章

oracle视图建主键

使用jpa在postgresql数据库中创建主键自增表

gaussdb如何建主键

在oracle中,创建表时,不创建主键,有没有默认索引?如果有,是啥索引?

在具有四个表的Oracle数据库中创建视图,每个表都有主键

在Oracle数据库中创建一个表,用两个键做联合主键,sql语句该怎么写?