我有一個多部分問題:在Oracle SQL中的主鍵上聲明附加索引時會發生什麼?
我的旅程開始時,我試圖找出是否可以在Oracle SQL中降序/升序主鍵。
似乎有不沿着CREATE TABLE MYTAB (ID INT PRIMARY KEY DESC);
或CREATE TABLE MYTAB (ID INT, CONSTRAINT PK PRIMARY KEY(ID DESC));
後來我才知道甲骨文暗中創建主鍵,以幫助加強其約束指數的行,以語法。我想我可以爲它創建一個索引,並使索引下降。
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.
所以我的問題是:
- 這是否意味着DESCENDING主鍵在Oracle SQL中不可行?
- 如果是這樣,爲什麼DESC不允許執行主鍵約束?
- 創建一個索引的行爲/效果究竟與我的第一個示例一樣? DESC在那裏工作......主鍵有兩個索引時會發生什麼?它的功能與另一個DB允許將DESC作爲主鍵規範的一部分的方式相同嗎?
爲什麼你認爲你需要一個DESC索引? –
我正在寫一個工具,將爲一堆不同的數據庫生成語句 - 我正在研究允許用戶指定升序/降序選項,並查看每個不同的數據庫實現如何處理升序/降序索引。看起來像甲骨文沒有必要像你說的那樣 – Grandclosing