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をインストールする方法の詳細な説明

推薦する

MYSQL マスタースレーブ レプリケーションの知識ポイントの概要

単一の MYSQL サーバーが現在の Web サイトのトラフィックに対応できない場合の最適化ソリュー...

JavaScriptエラーキャプチャの詳細な説明

目次1. 基本的な使い方とロジック2. 特徴3. エラーオブジェクト4. キャッチアンドスロー戦略の...

React における同期および非同期 setState の問題のコード分析

React は Facebook の社内プロジェクトとして始まりました。 React の出現は革命的...

Ubuntu 18.04 コマンドでタッチパッドを無効/有効にする

Ubuntu では、ショートカット キーでタッチパッドをオフにできない状況によく遭遇します。この問題...

基本的なウェブページパフォーマンス最適化ルールの簡単な概要

ブラウザのウェブページを最適化するためのいくつかのルールページの最適化静的リソース圧縮ビルド ツール...

Linux ログ内のキーワードとその前後の情報を検索する方法の例

日常業務では、ログを表示する必要がよくあります。たとえば、 tail コマンドを使用してログをリアル...

Dockerを使用してMySQL 8.0をデプロイする方法の例

1. 公式サイトを参照してdockerをインストールする2. MySQLイメージをプルします(デフォ...

JSはアニメーションのレイアウト変換を実装します

JS でアニメーションを記述する場合、移動前に相対位置を絶対位置に変換してからアニメーション機能を実...

設定ファイルを書いてMyBatisを簡単に使う方法

設定ファイルを書いてMyBatisを簡単に使う方法マイバティス3.xここでは MyBatis につい...

Vue3とTypeScriptを組み合わせたプロジェクト開発の実践の概要

目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...

Docker の MySQL コンテナのタイムゾーン問題の修正

序文Ahhang が Springboot プロジェクトを開発していたとき、フロントエンドから検証コ...

Docker デプロイメント RabbitMQ コンテナ実装プロセス分析

1. イメージをプルするまず、次のコマンドを実行して、イメージをローカル コンピューターにダウンロー...

CSSコンテンツ属性の具体的な使用法

コンテンツ属性は通常、::before および ::after 疑似要素で使用され、疑似要素のコンテ...

HTML の基本 - ハイパーリンク スタイルを設定する簡単な例

*** ハイパーリンクのスタイル設定の例a:link クリックされる前のハイパーリンクの状態a:vi...

AES_ENCRYPT() と AES_DECRYPT() を使用して MySQL を暗号化および復号化する正しい方法の例

序文最近、仕事でAES_ENCRYPT()関数を使用してプレーンテキストを暗号化し、MySQL に保...