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

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

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

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

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

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

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

【问题讨论】:

    标签: oracle indexing primary-key


    【解决方案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 子句指定。

      【讨论】:

        猜你喜欢
        • 2010-10-06
        • 2016-03-01
        • 2019-01-07
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        • 1970-01-01
        • 2014-06-08
        相关资源
        最近更新 更多