1

以下に示すように、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
4

4 に答える 4

5
select 
   owner, constraint_name, table_name, index_name 
from 
   user_constraints 
where constraint_type in ('P');
于 2013-03-08T10:37:45.943 に答える
4

主キーは一意でないインデックスでサポートできるため、一意性を強制するのは実際にはインデックスではなく、制約そのものです。

列のセットに対して主キーまたは一意キーを作成すると、デフォルトで一意のインデックスが作成されます。ただし、制約が延期可能であると宣言されている場合は、一意でないインデックスが作成されます。主キーまたは一意キーは、新しい一意のインデックスを作成せずに、一意でないインデックスでカバーされる一連の列に対して宣言することもできます。

したがって、主キーの制約を適用するのはサポートインデックスの一意性ではなく、主キーの列がnull以外である必要があることを強制するNOTNULL列の制約が存在すること以上です。どちらの場合も責任がある主キー制約自体。

ただし、列のNOT NULL宣言を除いて、すべての制約に必ず名前を付ける必要があります。

于 2013-03-08T10:36:14.613 に答える
1

まれに、インデックス列がPKの列のスーパーセットになることがあります。たとえば、PKが(A、B)のみであるのに対し、(A、B、C)のインデックス。

于 2013-03-08T10:59:06.030 に答える
0

クエリが示すように、主キー列にはインデックスが1つしかないため、ここで混乱することはありません。

ID列( )の一意のインデックスSYS_C0029541は、主キーを適用するために使用されます。

一般的なケースINDEX_NAMEでは、ビューの列をUSER_CONSTRAINTS使用して、一意性制約または主キーをポリシングするために使用されるインデックスを見つけることができます。

SELECT constraint_name, index_name, constraint_type
  FROM user_constraints
 WHERE table_name = 'TT';
于 2013-03-08T10:37:20.033 に答える