以下に示すように、2つの一意のインデックスを持つテーブルがある場合、そのテーブルの他のUNIQUEインデックスとは対照的に、どの一意のインデックスがPRIMARYKEYに対応するかをどのように判断しますか。
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
アップデート:
Florinのクエリを実行した結果は、次のとおりです。これは、どのインデックスがPRIMARYKEYを適用するかを明確に示しています。
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