「固有キー」と「主キー」の違い


回答:


20

テーブルには最大で1つのPRIMARY KEY制約を設定できますが、必要な数のUNIQUE KEY制約を設定できます。

の一部である列はPRIMARY KEYとして定義する必要がありますNOT NULLUNIQUE KEY制約の一部である列には必要ありません。列がNullableではない場合、一意キーと主キーに違いはありません。

もう1つの小さな違いは、UNIQUE KEY制約(およびインデックス)に必要な名前を選択できることです。一方、にPRIMARY KEYはデフォルト名があります:PRIMARY


5

一つの大きな違い

  • 主キーはヌル値を許可する列を許可しません
  • 一意のキーでNULL入力可能な列を許可

そうでなければ、大きな違いはありません...


4

他の人が指摘していないもの:

  • InnoDBテーブルでPKを明示的に宣言しない場合、PKが内部で作成されます。この暗黙的なキーでアクセス、順序付け、またはフィルターすることはできません。これには、各セカンダリインデックスに行のPKへのコピーポインターが含まれるため、リソースの点で影響があります。

3

最も重要な違いは、その目的にあります。

  • 主キー主キーの目的は、「キー」として機能することです。主キーは、レコードを識別するために使用されるリレーショナルデータベースのキーです。
  • 一意のインデックス:一意のインデックスは、パフォーマンスを目的とした「インデックス」です。オプティマイザーは、条件「where x =:x」の場合、結果として1つのレコードしか存在しないことを知っているため、それに適した計画を準備できます。
  • 一意の制約:これは、その列に重複する値がないことを確認する「制約」です。これは、データの整合性の制約です。

目的とは別に、次の点が注目に値します。

  • 特に指定されていない限り、PRIMARY KEYはクラスター化インデックスを作成しようとします(ただし、この点はSQL Serverについてです、コメントで述べたように)
  • テーブルごとにプライマリキーは1つだけ存在できます。しかし、多くのユニークな制約とユニークなインデックスがあります
  • PRIMARY KEYは常にnullではありませんが、一意制約を持つ列はNULL値を保持できます

1
質問にはMySQLというタグが付いています。別の方法で指定することはできません。テーブルがInnoDBエンジンを使用し、主キーがある場合、これはクラスター化インデックスです。選択の余地ない。おそらく、SQL Serverについて考えていたのでしょう。
ypercubeᵀᴹ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.