給定一個包含兩個唯一索引的表(如下所示),如何確定哪個唯一索引對應於PRIMARY KEY,而不是該表上的其他UNIQUE索引?如何確定哪個UNIQUE索引在Oracle中實施PRIMARY KEY
user_indexes和user_ind_columns似乎沒有攜帶該信息。謝謝,--DD
PS:缺乏顯式命名索引和當然使用命名約定。
SQL> create table tt (id number not null primary key, name varchar2(64 char) not null unique, info varchar2(4000));
SQL> create index tt_idx on tt(info);
SQL> select INDEX_NAME, INDEX_TYPE, UNIQUENESS from user_indexes where TABLE_NAME='TT';
INDEX_NAME INDEX_TYPE UNIQUENES
-------------------- --------------------------- ---------
SYS_C0029541 NORMAL UNIQUE
SYS_C0029542 NORMAL UNIQUE
TT_IDX NORMAL NONUNIQUE
SQL> select * from user_ind_columns where TABLE_NAME='TT';
INDEX_NAME TABLE_NAME COLUMN_NAME COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH DESC
-------------------- -------------------- ------------ --------------- ------------- ----------- ----
SYS_C0029541 TT ID 1 22 0 ASC
SYS_C0029542 TT NAME 1 256 64 ASC
TT_IDX TT INFO 1 4000 4000 ASC
更新:
下面是運行弗羅林的查詢,這清楚地表明該指數強制執行P RIMARY KEY的結果:
SQL> select constraint_name, constraint_type, index_name from user_constraints where table_name='TT';
CONSTRAINT_NAME C INDEX_NAME
------------------------------ - --------------------
SYS_C0029539 C
SYS_C0029540 C
SYS_C0029541 P SYS_C0029541
SYS_C0029542 U SYS_C0029542
謝謝。 --DD – ddevienne 2013-03-08 10:46:27