
主キーと一意キーの本質的な違いは、主キーはNULL値を受け入れないのに対し、NULL値は一意キー制約内で許可されることです。
比較表
比較基準 | 主キー | ユニークキー |
---|---|---|
基本 | テーブルの各行の一意の識別子として使用されます。 | また、主キーとして定義されていない行を一意に決定します。 |
NULL値の受け入れ | 主キーはNULL値を受け入れません。 | UniqueはNULL値を受け入れます。 |
表に定義できるキーの数 | 主キーは1つだけ | 複数の |
索引 | クラスタ化インデックスを作成します | 非クラスタ化インデックスを作成します |
主キーの定義
列がその表の各タプル(行)を一意に識別する場合、その列はその表の主キーとしてコールできます。 それはテーブルに整合性制約を強制します。 1つのテーブルに許可される主キーは1つだけです。 主キーは、重複値およびNULL値を受け入れません。 主キーは、変更がめったに起こらないように注意して選択されます。つまり、テーブル内の主キーが変更されることはほとんどありません。
テーブルを使って主キーの概念を理解しましょう。 ここでは、Roll_number、Name、Batch、Phone_number、Citizen_IDなどの属性を持つStudentテーブルという名前のテーブルを作成しています。

主キーは外部キーによって参照できます。 テーブルに一意のクラスタ化インデックスを作成します。 クラスタ化インデックスでは、データ行はキー値に基づいて並べ替えられ、テーブルまたはビューに格納されます。 テーブル内にクラスタ化インデックスは1つしか存在できません。これは、テーブル内のデータ行を1つの順序でのみ並べ替えることができるためです。
ユニークキーの定義
主キーと同様に、 一意キー制約でも個々のタプルを関係内で一意に識別します。 しかし、それらの間には一定の違いがあります。 テーブルは複数のユニークキーを持つことができます。 一意キー制約は、列に対して1つのNULL値しか受け入れません。
Roll_number、Name、Batch、Phone_number、およびCitizen_IDの各属性を持つStudentテーブルがある、同様の例でこれを理解しましょう。 ロール番号属性は主キーで割り当てられます。

一意性制約も外部キーによって参照されます。 誰かが主キーではない列や列のグループに制約を強制したい場合に使用できます。 主キーとは異なり、 非クラスタ化インデックスを生成します 。 非クラスタ化インデックスは、データ行とは異なる構造を持っています。 その中の各キー値エントリは、キー値を含むデータ行を指しているため、ポインタを使用します。
主キーと一意キーの主な違い
- 主キーとして宣言された属性は、NULL値を受け入れません。 一方、属性がUniqueとして宣言されている場合、1つのNULL値を受け入れることができます。
- テーブルには主キーしか持てませんが、テーブルには一意の制約が複数ある場合があります。
- 主キーが定義されると自動的に作成されるクラスタードインデックス。 対照的に、一意キーは非クラスタ化インデックスを生成します。
結論
主キーと一意キーはどちらも、列または列のグループに一意の値を持つ表の行の一意の識別子として機能します。 これらのキー制約は、すべてのテーブルが最大で1つの主キーを持つことができるのに対して、テーブルは主キーではない複数の一意のキーを持つことができるという点で大きく区別されます。