【发布时间】:2017-09-11 20:04:41
【问题描述】:
我有一个多部分的问题:
当我试图弄清楚我是否可以在 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.
所以我的问题是:
- 这是否意味着在 Oracle SQL 中不能使用 DESCENDING 主键?
- 如果是这样,为什么 DESC 不允许强制执行主键约束?
- 在我的第一个示例中单独创建索引的行为/效果究竟是什么? DESC 在那里工作......当主键上有两个索引时会发生什么?它的功能是否与另一个数据库允许 DESC 作为主键规范的一部分相同?
【问题讨论】:
-
您认为为什么需要 DESC 索引?
-
我正在编写一个工具,它将为一堆不同的数据库生成语句 - 我正在研究允许用户指定升序/降序选项,并查看每个不同的数据库实现如何处理升序/降序指数。看来甲骨文不需要你说的
标签: sql oracle indexing primary-key