違い: 1. 主キーは制約であり、一意のインデックスはインデックスです。 2. 主キーの作成後は、一意のインデックスを含める必要がありますが、一意のインデックスは必ずしも主キーである必要はありません。 3. 一意のインデックス列では NULL 値が許可されますが、主キー列では NULL 値が許可されません。 4. 主キーは他のテーブルから外部キーとして参照できますが、一意のインデックスは参照できません。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
主キー インデックスと一意インデックスの違い
主キーは制約であり、一意インデックスはインデックスです。本質的には同じですが異なります。
主キーを作成した後は、一意のインデックスを含める必要があります。一意のインデックスは必ずしも主キーである必要はありません。
一意のインデックス列では NULL 値が許可されますが、主キー列では NULL 値が許可されません。
主キー列が作成されると、デフォルトで NULL 一意のインデックスが設定されます。
主キーは他のテーブルから外部キーとして参照できますが、一意のインデックスは参照できません。
例:
--主キーと一意のインデックスのみを含むテーブルを作成します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);
SELECT table_name,table_type,index_name,index_type,uniqueness FROM USER_INDEXES WHERE TABLE_NAME='TEST';
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;
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 サイトの他の関連記事を参照してください。