ホームページ >データベース >mysql チュートリアル >主キーと一意のインデックスの違いは何ですか

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

青灯夜游
青灯夜游オリジナル
2021-04-21 17:31:3916479ブラウズ

違い: 1. 主キーは制約であり、一意のインデックスはインデックスです。 2. 主キーの作成後は、一意のインデックスを含める必要がありますが、一意のインデックスは必ずしも主キーである必要はありません。 3. 一意のインデックス列では NULL 値が許可されますが、主キー列では NULL 値が許可されません。 4. 主キーは他のテーブルから外部キーとして参照できますが、一意のインデックスは参照できません。

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

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

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

  • 主キーは制約であり、一意インデックスはインデックスです。本質的には同じですが異なります。

  • 主キーを作成した後は、一意のインデックスを含める必要があります。一意のインデックスは必ずしも主キーである必要はありません。

  • 一意のインデックス列では 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'

-- 主キー制約フィールド名と非 null 制約名のみが表示されます。非 null 制約は、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')

プログラミング関連の知識の詳細については、プログラミング教育

を参照してください。 !

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

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