是否可以命名在 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 中创建主键期间创建的索引?的主要内容,如果未能解决你的问题,请参考以下文章