Mysql の主キーと一意キーの違いのまとめ

Mysql の主キーと一意キーの違いのまとめ

主キーとは何ですか?

主キーは、テーブル内の各タプル (行) を一意に識別するテーブル内の列です。主キーはテーブルに整合性制約を適用します。テーブル内で許可される主キーは 1 つだけです。主キーは重複値や null 値を受け入れません。テーブル内の主キーの値はほとんど変更されないため、主キーを選択する際には注意し、ほとんど変更されないものを選択する必要があります。あるテーブルの主キーは、別のテーブルの外部キーによって参照できます。

主キーをよりよく理解するために、roll_number、name、batch、phone_number、citizen_id などの属性を持つ Student というテーブルを作成しましょう。

上記の例では、各大学に在籍する学生には固有の Roll_number があるため、roll_number 属性が同じ NULL 値を持つことは決してありません。したがって、2 人の学生が同じ Roll_number を持つことはできず、テーブル内の各行は学生の roll_number 属性によって一意に識別できます。したがって、この場合は、Roll_number 属性を主キーとして設定できます。

ユニークキーとは何ですか?

一意キー制約は、リレーションまたはテーブル内の単一のタプルを一意に識別します。主キーとは異なり、テーブルには複数の一意のキーを設定できます。一意キー制約は、列に対して 1 つの NULL 値のみを受け入れることができます。一意制約は、別のテーブルの外部キーによっても参照されます。主キーではない列および列のグループに一意の制約を適用する場合に使用できます。

一意のキーをよりよく理解するために、Roll_number、Name、Batch、Phone_number、Citizen_ID 属性を持つ Student テーブルを使用します。Roll_number 属性には主キーが指定されています。

この例では、国のすべての国民が固有の識別番号を持つ必要があるため、Citizen_ID 列の各エントリは一意で重複しない必要があるという一意の制約を Citizen_ID に割り当てることができます。ただし、学生が別の国から移住した場合、その学生には Citizen_ID がなく、一意の制約で NULL が 1 つ許可されるため、エントリには NULL 値が含まれる可能性があります。

主キーと一意キーの主な違い:

1. 属性が主キーとして宣言されている場合、NULL 値は受け入れられません。一方、プロパティが Unique として宣言されている場合は、 NULL 値を受け入れることができます。

2. テーブルには主キーを 1 つしか設定できませんが、一意のキーは複数設定できます。

3. 主キーを定義するときにクラスター化インデックスを自動的に作成します。対照的に、一意キーは非クラスター化インデックスを生成します。

以上がMysqlの主キーとユニークキーの違いについての説明です。123WORDPRESS.COMをご利用いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL の自動増分主キーが使い果たされた場合の対処方法
  • MySQL の自動増分 ID (主キー) が不足した場合の解決策
  • MySQL が uuid または snowflake id を主キーとして使用することを推奨しない理由の詳細な分析
  • MySQL テーブルにおける非主キー列オーバーフロー監視の詳細な説明
  • Prometheus を使用して、MySQL の自動増分主キーの残りの使用可能パーセンテージをカウントします。
  • Python3はMySQLを操作してデータを挿入し、主キーIDの例を返します
  • MySQL の非主キー自己増分使用例の分析
  • MySQL で主キーと ROWID を使用する際の落とし穴の概要
  • Spring Boot は、MySQL を使用して主キー UUID を実装するために、mybatis を統合します。
  • MySQL主キー命名戦略関連

<<:  vue-router 履歴モード サーバー側設定プロセス記録

>>:  LinuxにPHP7をインストールする方法の詳細な説明

推薦する

Dockerコンテナのネットワークポート設定プロセスの詳細な説明

ネットワークポートの公開実際、Docker にはネットワーク ポートの公開に関わる 2 つのパラメー...

このリファレンスとJavaScriptのカスタムプロパティの詳細な説明

目次1. このキーワード2. カスタム属性3. 包括的なケース1:タブの実装付録要約する1. このキ...

MySQL 4G メモリ サーバー構成の最適化

会社のウェブサイトのアクセス数が増えてくると(1日10万PV以上)、当然MySQLがボトルネックにな...

Vueのカスタムイベントコンテンツ配信の詳細な説明

1. これは理解するのが少し複雑なので、原理を注意深く読んで自分で入力していただければ幸いです。 &...

Tik Tok サブスクリプション ボタンのアニメーション効果を実現する CSS

少し前にTik Tokを見ていて、フォローするときのボタンアニメーションがとても美しいと思ったのと、...

Linux RabbitMQ クラスタ構築プロセス図

1. 全体的な手順冒頭で、RabbitMQ サービスをインストールして実行する方法を紹介しましたが、...

MySQL テーブル削除操作の実装 (delete、truncate、drop の違い)

この記事では主に、MySQL でテーブルを削除する 3 つの操作、つまり delete ステートメン...

MySQLシリーズ マルチテーブル結合クエリ92および99構文例詳細チュートリアル

目次1. デカルト積現象2. 接続クエリの知識ポイントのまとめ1) 結合クエリとは何ですか? 2) ...

Docker を使用した MySQL のデプロイの詳細説明 (データ永続化)

この記事では、Docker を使用して MySQL をデプロイし、データを保持する方法について簡単に...

Vueはブラウザ側のコードスキャン機能を実装します

背景少し前にブラウザカメラの取得とスキャンコード認識の機能を作りました。その際の知識ポイントと具体的...

JavaScript でグレイウルフのポットビーティングゲームを実装

1. プロジェクト文書 2. ページレイアウトにHTMLとCSSを使用するHTML部分 <di...

フォーム検証機能を実装するためのネイティブ js

目次開発の際には、機能を段階的に分析して実装することで、明確な考え方を保つことができます。 1. フ...

Dockerイメージサイズを最適化する一般的な方法

通常、私たちが構築する Docker イメージはサイズが大きく、多くのディスク領域を占有します。コン...

Mac OS に MySQL 5.7.20 をインストールするための詳細なグラフィックとテキストの説明

Mac OS X で TAR.GZ から MySQL 5.7 をインストールする MySQL 5.6...