[mysql]——テーブル制約

目次

序文

(1) 空の属性

(2) デフォルト値

(3) カラムの説明

(4) ゼロフィル

(5) 主キー

(6) 自己成長

(7) 固有キー

(8) 外部キー

要約する


序文

実際にフィールドを制約するのはデータ型ですが、データ型の制約は非常に単一です。データの合法性をより適切に確保し、ビジネス ロジックの観点からデータの正確性を確保するには、いくつかの追加の制約が必要です。たとえば、フィールドの 1 つは電子メールであり、一意である必要があります。
 

意味:

  • したがって、データベースでは、テーブル制約 (cyonstraint) は、テーブル内のデータのルールと制限を定義するために使用されるルールです。これらは、データの整合性と一貫性を確保し、違法なデータの挿入、更新、または削除を防ぐために使用されます。制約を定義することで、特定の条件と規制を強制して、データの正確さと品質を確保できます。

一般的なテーブル制約タイプは次のとおりです。

  1. キー制約: テーブル内の各行を一意に識別するための列または列のセットを定義します。主キーは、一意性とデータの整合性を確保するために使用されます。

  2. Unique Constraint : 列または列のグループ内のすべての値が一意であることを保証しますが、NULL 値を持つことができます。データの重複を防ぎます。

  3. 外部キー制約: テーブル間の関係の整合性を確保するために使用されます。他のテーブルの主キーまたは一意キーへの参照を定義し、テーブル間の関連付けを確立するために使用できます。

  4. Not Null制約: 列に null 値 (NULL) を含めることができないことを指定します。これにより、列に値を指定する必要があります。

  5. デフォルト制約: 列のデフォルト値を定義します。新しい行を挿入するときに列の値が指定されていない場合は、デフォルト値が使用されます。

  6. チェック制約: 列の値の範囲または条件を定義します。これは、列が受け入れることができるデータを制限するために使用されます。

これらの制約は、列に個別に適用することも、複数の列に適用することも、組み合わせて適用することもできます。テーブル制約を使用すると、データベース レベルでデータを検証および制限し、データの整合性と一貫性を向上させることができます。


(1) 空の属性

  1. 2 つの値: null (デフォルト) とnot null (空ではない)
  2. データベースのデフォルトのフィールドは基本的に空ですが、空のデータは計算に参加できないため、実際の開発中はフィールドが空でないことを確認してください。

 

ケース:
クラス名とクラスが存在する教室を含むクラス テーブルを作成します。
通常のビジネス ロジックに立つと、次のようになります。

  1. クラスに名前がないと、自分がどのクラスにいるのかわかりません
  2. 教室名が空の場合、どこで授業が行われているかわかりません。

したがって、データベースのテーブルを設計する際には、上記の条件を満たすデータをテーブルに挿入することはできないという制限をテーブルに課す必要があります。これが「制約」です。
 

  •  データを挿入するときに、教室データがないため挿入が失敗します。

 


(2) デフォルト値

MySQL では、デフォルト制約を使用してテーブル内の列のデフォルト値を指定できます。このようにすると、新しい行を挿入するときに、その列に特定の値が指定されていない場合は、デフォルト値が自動的に使用されます。

以下は、デフォルト値制約を持つテーブルを作成する例ですusers

  • 上の例では、name と の両方のemail 列がデフォルト値で定義されています。データを挿入するときに、指定された列の値が指定されていない場合は、デフォルト値が自動的に使用されます。 

デフォルト値が有効になります。データの挿入時にフィールドに値が割り当てられていない場合は、デフォルト値が使用されます。
 

 

第二に。既存のテーブルの列のデフォルト値を変更する場合は、次のALTER TABLEコマンドを使用できます。

 


(3) カラムの説明

MySQL では、列の説明 (Column description) を使用して、テーブル内の列の説明情報を追加できます。列の説明は、目的、意味、その他の関連する説明など、列に関する詳細を提供するために使用されるオプションのメタデータ属性です。

次に、列の説明を含む t1 テーブルを作成する例を示します。

 

注釈情報は desc を通じて表示できません。
 

 ショーを通して見ることができます:

 

 


(4) ゼロフィル

MySQL において、ZEROFILL 数値型を格納する列をゼロで指定された桁数までパディングするテーブル制約。必要に応じてギャップをゼロで埋めて、値を固定桁数で表示します。

制約を使用するには  などZEROFILL の数値列で制約を使用する必要があります。 列定義で、 キーワードを追加し、必要な桁数を指定して、ゼロ パディングを有効にします。INTBIGINTFLOATDOUBLEZEROFILL 

 int(10) が表示されますが、これは何を意味するのでしょうか? 整数は4バイトコードではないのでしょうか?この10は何を表しているのでしょうか?実際には、zerofill 属性はなく、括弧内の数字は意味がありません。次のように、列 a と b は以前に挿入されたデータです。
 

 

ただし、列に zerofill 属性を追加すると、表示される結果は異なります。t2 テーブルの属性を変更します。
 

 

zerofill 属性を列 a に追加して検索し、次の結果を返します。
 

【結論は】 

  •  今度はaの値が元の1から00001に変わっていることがわかりますが、これがzerofill属性の役割で、設定した幅より小さい場合は自動的に0が埋められます。これは最後に表示された結果にすぎず、MySQL に格納されている実際の値は依然として 1 であることに注意してください。

どうしてこれなの?16 進関数を使用して次のことを証明できます

 

 

  • データベースの内部ストレージはまだ 1,00001 であることがわかります。これは、zerofill 属性を設定した後の単なるフォーマットされた出力です。
     

その直後に、 a の int() の値を 5 に変更し、挿入操作を実行します。

 挿入操作は次のようになります。

【結論は】 

 現在のテーブルを見ると、問題が見つかります。

  1. 5 桁未満を挿入すると、不足している桁は 0 で埋められます。
  2. 5桁以上の場合は挿入されたデータをそのまま出力します。

最後に、答えは、なぜ作成するデフォルト値が int(10) なのかということです。

  1. まず、作成した型は unsigned 型であり、unsigned の値の範囲は [0, 2^32-1] です。
  2. そして、2^32-1 の値の範囲は 10 桁の整数なので、これを見ると、デフォルトは int(10) です。

 概要ZEROFILL 特に固定数の識別子またはエンコーディングが必要な場合は、制約を使用して数値の表示と書式設定を容易にします。


(5) 主キー

MySQL では、主キー制約を使用して、テーブル内の 1 つ以上の列を、テーブル内の各行を一意に識別する制約として定義します。主キー制約は、データの一意性と整合性を確保するために使用される重要な制約です。

主キー制約には次の特徴があります。

  1. 一意性: 主キーの値はテーブル全体で一意である必要があります。つまり、各行の主キー値は異なります。
  2. Non-nullability : 主キー列の値を NULL にすることはできません。つまり、主キー列を空にすることはできません。
  3. 一意の識別: 主キーはテーブル内の各行を一意に識別するために使用され、これによりテーブル内のデータの正確な位置と関連付けが容易になります。

【場合】

  • テーブルを作成するときは、フィールドに主キーを直接指定します。
     

  •  主キー制約: 主キーに対応するフィールドを繰り返すことはできません。繰り返されると操作は失敗します。

  •  テーブルが作成されても主キーがない場合は、主キーを再度追加できます。

 

  • 主キーを削除する
     

 

  • 複合主キー
     

テーブルを作成するときは、主キー (主キー フィールド リスト) を使用してすべてのフィールドの後に主キーを作成します。主キーとして複数のフィールドがある場合は、複合主キー
を使用できます。
 

 

 

主キー制約を指定すると、テーブル内のデータが一意であることを保証し、データの整合性を検証して保護できます。


(6) 自己成長

MySQL では、Auto_increment はテーブルの列に対する制約で、データベースが新しく挿入された各行に一意の増分値を自動的に割り当てることができます。自動増加列は、新しく挿入された各行が一意の増加する識別子を持つようにするために、テーブルの主キー列としてよく使用されます。

auto_increment: 対応するフィールドに値が指定されていない場合、システムによって自動的にトリガーされ、現在のフィールドの最大値+ 1から新しい異なる値が取得されます。通常、論理主キーとして主キーと組み合わせて使用​​されます。


自己成長の特徴:

  1. インデックスである場合 (キー列に値がある場合)、フィールドは自己増加する必要があります。
  2. 自動インクリメントフィールドは整数である必要があります
  3. テーブルには最大 1 つの自己インクリメントを含めることができます
     

【場合】

 

挿入後に最後に挿入された AUTO_INCREMENT の値を取得します (バッチ挿入では最初の値が取得されます)
 

【索引】

リレーショナル データベースでは、インデックスはデータベース テーブル内の 1 つまたは複数の列の値を並べ替える別の物理的なストレージ
構造これらの値を物理的に識別する、テーブル内のデータ ページへの論理ポインターのリスト。索引は本の目次に相当し、目次のページ番号をもとに必要な内容をすぐに見つけることができます。


インデックスは、テーブルの指定された列に格納されているデータ値へのポインターを提供し、指定した並べ替え順序に従ってこれらのポインターを並べ替えます。
データベースはインデックスを使用して特定の値を検索し、前方をポイントしてその値を含む行を検索します。これにより、テーブルに対応する SQL ステートメントがより高速に実行され、データベース テーブル内の特定の情報に迅速にアクセスできるようになります。

自己拡張制約を使用すると、一意に識別された行を簡単に生成および維持できるため、手動で識別子を提供する作業や競合の可能性が軽減されます。自動拡張列は、効率的なデータの挿入と検索のための主キー列としてよく使用されます。


(7) 固有キー

MySQL では、一意のキー (Unique Key) は、テーブル内の列の値または列の組み合わせがテーブル全体で一意であることを保証するために使用される制約です。一意キー制約は主キー制約に似ていますが、NULL 値を許可し、複数の列に適用できます。

一意のキー制約には次の特徴があります。

  1. 一意性: 一意のキーの値はテーブル全体で一意である必要があります。つまり、各行の一意のキー値が他の行の一意のキー値と重複することはできません。
  2. NULL 値を含めることができる: 一意のキー列には NULL 値を含めることができます。NULL は NULL と等しくないため、NULL 値を含む 2 つの行は一意キー制約に違反しません。

一意キーと主キーの違いについて:

  1. 主キーは一意性を識別するためのものであると単純に理解できます。
  2. 一意のキーは、ビジネスにおいて他の情報と重複しないようにするためのものです。
     

 

  • 一意の制約は繰り返すことはできませんが、空にすることはできます。
     

 

一意キー制約を使用すると、テーブル内の列または列の組み合わせが確実に一意の値を持つようになり、データの整合性と一貫性が保証されます。一意のキー制約は NULL 値を許可し、複数の列に適用できるため、主キー制約よりも高い柔軟性が得られます。


(8) 外部キー

MySQL では、外部キーはテーブル間のデータの整合性と一貫性を確保するために使用される制約です。外部キーは、あるテーブルの列値と別のテーブルの列値の間の関係に基づいて、テーブル間の関係を定義します。

外部キー制約には次の特徴があります。

  1. 関連: 外部キー制約は、テーブル間の関連付けを定義するために使用されます。この場合、あるテーブル (子テーブルと呼ばれます) の列値は、別のテーブル (親テーブルと呼ばれます) の列値に存在する必要があります。
  2. データの整合性: 外部キー制約により、関連付けられたデータが親テーブルに存在することが保証されるため、データの整合性と一貫性が維持されます。これにより、無効なデータまたは矛盾したデータが子テーブルに挿入されるのを防ぎます。
  3. オプション: 外部キー列は空にすることも、NULL 値を含めることもできますが、値が含まれる場合、その値は親テーブルに存在する必要があります。

外部キー制約を使用するには、次の条件を満たす必要があります。

  1. 子テーブルと親テーブルの間には関連付けられた列が必要であり、子テーブルの列は親テーブルの列を参照するために使用されます。
  2. 親テーブルの関連列には、一意制約または主キー制約が必要です。

文法

  • 外部キー(フィールド名)はメインテーブル(列)を参照します

【場合】

 上記の回路図を設計します。

  • 最初に主キーテーブルを作成します
     

 

  • スレーブ テーブルを再度作成します。

  •  通常通りにデータを挿入します。

  •  クラス番号 30 の学生を挿入します。そのようなクラスがないため、挿入は失敗します。

  •  クラス ID を null として挿入します。たとえば、学生が来ましたが、まだクラスが割り当てられていません。

  •  外部キー制約を理解する方法:

まず第一に、この世界では多くのデータが関連していることを認めます。


理論的には、上記の例では外部キー制約を作成せず、通常どおり学生テーブルとクラス テーブルを作成し、必要なフィールドをすべて用意しています。


このとき、実際に使用する際にどのような問題が生じる可能性があるのでしょうか?

  1. 挿入された生徒情報には特定のクラスが含まれているが、そのクラスがクラス テーブルに存在しないという可能性はありますか?
  2. たとえば、1 学年には 26 クラスしかありませんが、実際には 27 人の生徒がクラスに存在します (このクラスは現在存在しません)。これは明らかに問題です。


現時点では 2 つのテーブルはビジネス上で関連付けられていますが、ビジネス上で制約関係が確立されていないため、問題が発生する可能性があります。


この解決策は外部キーによって実現されます。外部キーの確立の本質は、レビューのために相関関係を mysql に渡し、事前にテーブル間の制約を mysql に伝えることであり、その後、ユーザーがビジネス ロジックに準拠しないデータを挿入した場合、mysql は挿入を許可しません。
 

外部キー制約を使用すると、テーブル間の関係を確保し、データの整合性を維持できます。無効な参照データや不整合の原因となるデータの挿入を防ぎます。外部キー制約は、テーブル間の関係を維持するための重要なツールであり、関連するデータの一貫性を確保するのに役立ちます。


要約する

上記はすべて、mysql テーブルの制約に関するものです。続いて、この記事の内容を簡単におさらいしていきましょう!

  1. MySQL では、データの整合性と一貫性を定義および保護するためにテーブル制約が使用されます。
  2. これらの制約は、テーブルの作成時に指定することも、ALTER TABLEステートメントを使用して追加、変更、または削除することもできます。
  3. これらは、テーブル内のデータが特定のルールと関連付け条件を満たしていることを確認し、データの一貫性と整合性を保証するのに役立ちます。
  4. 実際のニーズとデータ モデルの設計に基づいて、さまざまなタイプの制約を組み合わせて使用​​して、必要なビジネス ロジックとデータ制限を実現できます。

以上でこの記事の説明は終わりです。見てくださった皆様、応援してくださった皆様、ありがとうございました!

 

おすすめ

転載: blog.csdn.net/m0_56069910/article/details/132243061
おすすめ