ホームページ  >  記事  >  データベース  >  主キーと一意のインデックスの違いは何ですか?

主キーと一意のインデックスの違いは何ですか?

一个新手
一个新手オリジナル
2017-09-08 14:31:533497ブラウズ

主キーと一意インデックスの違い

-- 違い

主キーは制約であり、一意インデックスはインデックスです。この 2 つは本質的に異なります。
主キーの作成後は、一意のインデックスが含まれている必要があります。一意のインデックスは必ずしも主キーである必要はありません。
一意のインデックス列では null 値が許可されますが、主キー列では null 値が許可されません。
主キー列が作成されると、デフォルトで null 値 + 一意のインデックスになります。
主キーは他のテーブルから外部キーとして参照できますが、一意のインデックスは参照できません。
テーブルは主キーを 1 つしか作成できませんが、複数の一意のインデックスを作成できます。
主キーは、自動インクリメント列や ID 番号など、変更が容易ではない一意の識別子に適しています。
RBO モードでは、主キーの実行計画の優先順位は一意のインデックスの実行計画の優先順位よりも高くなります。 どちらもクエリの速度を向上させることができます。

-- 主キーと一意のインデックスのみを含むテーブルを作成します

CREATE TABLE test
(PrimaryKey VARCHAR2(20),
  UniqueKey  VARCHAR2(20)
);

-- 異なる構文で主キーと一意のインデックスをそれぞれ作成します

ALTER TABLE test ADD CONSTRAINT test_PrimaryKey PRIMARY KEY (PrimaryKey);
CREATE UNIQUE INDEX test_UniqueKey ON test (UniqueKey);

-- USER_INDEXES に 2 つのインデックス名が表示されます

SELECT table_name,table_type,index_name,index_type,uniqueness
  FROM USER_INDEXES
  WHERE TABLE_NAME='TEST';


-- USER_IND_COLUMNS では、2 つのインデックス フィールド名が表示されます

SELECT table_name,index_name,column_name,column_position
  FROM USER_IND_COLUMNS
  WHERE TABLE_NAME='TEST';


-- USER_CONSTRAINTS では、主キー制約名のみが表示されます

SELECT table_name,constraint_name,constraint_type
  FROM USER_CONSTRAINTS
  WHERE TABLE_NAME='TEST';


-- USER_CONS_COLUMNS では、主キー制約のみが表示されますフィールド名

SELECT table_name,constraint_name,column_name,position
  FROM USER_CONS_COLUMNS
  WHERE CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME                          
   FROM USER_CONSTRAINTS                            
   WHERE TABLE_NAME='TEST');

-- 一意のインデックスに非 null 制約を追加します

ALTER TABLE test MODIFY UniqueKey NOT NULL;

-- USER_CONSTRAINTS には主キー制約名と非 null 制約名のみが表示されます

SELECT table_name,constraint_name,constraint_type
  FROM USER_CONSTRAINTS
  WHERE TABLE_NAME='TEST'


- - USER_CONS_COLUMNS のみ 主キー制約フィールド名と非 null 制約フィールド名を監視できます

SELECT table_name,constraint_name,column_name,position
  FROM USER_CONS_COLUMNS
  WHERE CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME                             
  FROM USER_CONSTRAINTS                            
  WHERE TABLE_NAME='TEST')

以上が主キーと一意のインデックスの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。