在Oracle SQL中的主键上声明附加索引时会发生什么



我有一个多部分问题:

我的旅程始于我试图弄清楚我是否可以在Oracle SQL中降下/升级主键。

似乎没有沿CREATE TABLE MYTAB (ID INT PRIMARY KEY DESC);CREATE TABLE MYTAB (ID INT, CONSTRAINT PK PRIMARY KEY(ID DESC));

的语法

后来,我学会了Oracle隐式为主键创建一个索引,以帮助执行其约束。我认为我可以为其创建一个索引,并使索引下降。

CREATE INDEX MYIND ON MYTAB (ID DESC);

这奏效了,当我进行查询以查看存在哪些索引时,我得到了:

> SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'MYTAB';
INDEX_NAME
------------------------------
SYS_C0011939
MYIND

我看到隐式创建的索引以及我自己的索引...我试图查看是否可以通过在表创建过程中为主键的创建主键的索引来摆脱隐式创建的索引:

 CREATE TABLE MYTAB (ID INT PRIMARY KEY USING INDEX (CREATE INDEX MYIND ON MYTAB (ID ASC)));

这有效:

> SELECT INDEX_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'MYTAB';
INDEX_NAME
------------------------------
MYIND

有趣的是,使用desc作为索引方向给我以下错误:

Specified index cannot be used to enforce the constraint.


所以我的问题是:

  1. 这是否意味着在Oracle SQL中不可能下降主键?
  2. 如果是这样,为什么DESC不允许执行主要的主要密钥约束?
  3. 与我的第一个示例中,分别创建索引的行为/效果到底是什么?DESC在那里工作...当主键上有两个索引时会发生什么?它是否像另一个DB允许DESC作为主要密钥规范的一部分一样运行吗?

oracle创建索引作为双链列表,以便在需要时可以按升或降序遍历每个索引。

对于多列索引,但是,您可以将DESC关键字添加到与其他列以降序存储的一个或多个列。

这具有有限的有用性,并且不经常使用 - 但是当您创建索引专门用于支持特定查询中的特定ORDER BY子句时,它可能是有用的,其中某些(但不是全部)列以降序排序。<<<<<<。/p>

最新更新