データベース内のSQL整合性制約ステートメントの分析

データベース内のSQL整合性制約ステートメントの分析

整合性制約

整合性制約はテーブル データの正確性を保つためのものです。データが正しくない場合は、そもそもテーブルに追加できません。

1 主キー

列に主キー制約を追加すると、この列のデータは繰り返すことができなくなります。このように、各レコード行の主キー列の値は、その行の一意の識別子になります。たとえば、学生の ID 番号は一意の識別子として使用できますが、学生の名前は複数の学生が同じ名前を持つ可能性があるため、一意の識別子として使用できません。
主キー列の値は NULL または重複にできません。

主キー制約を指定するには、PRIMARY KEY キーワードを使用します。

テーブルを作成します。列を定義するときに主キーを指定します。

テーブルの作成(
         sid CHAR(6) 主キー、
         sname VARCHAR(20)、
         年齢 INT、
         性別 VARCHAR(10)
);

テーブルを作成します。列を定義してから、主キーを個別に指定します。

テーブルの作成(
         sid CHAR(6)、
         sname VARCHAR(20)、
         年齢 INT、
         性別 VARCHAR(10)、
         主キー(sid)
);

テーブルを変更するときに主キーを指定します。

ALTER TABLE スタ
主キーを追加します(sid);

主キーを削除するには (主キー列ではなく、主キー制約のみを削除します)、次の手順を実行します。

ALTER TABLE stu DROP PRIMARY KEY;

2. 主キーの自動増分

MySQL は主キーの自動増加機能を提供します。主キーを自動増分に設定すると、主キー値が指定されていない場合、主キー値が自動的に生成され、最大の主キー値 + 1 になるため、主キーが重複する可能性がなくなります。

テーブルを作成するときに主キーを自動拡張するように設定します (自動拡張するには主キーが整数である必要があります)。

テーブルの作成(
         sid INT 主キー AUTO_INCREMENT、
         sname VARCHAR(20)、
         年齢 INT、
         性別 VARCHAR(10)
);

テーブルを変更するときに主キーの自動増分を設定します。

ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;

テーブルを変更するときに主キーの自動増分を削除します。

ALTER TABLE stu を変更し、sid sid INT を変更します。

3 空ではない

空でない制約を指定する列には、値がないことはできません。つまり、レコードを挿入するときには、空でない制約が追加された列に値を指定する必要があります。レコードを変更するときは、空でない列の値を NULL に設定することはできません。

非 null 制約を指定します。

テーブルの作成(
         sid INT 主キー AUTO_INCREMENT、
         sname VARCHAR(10) NOT NULL、
         年齢 INT、
         性別 VARCHAR(10)
);

sname フィールドを空でない値として指定した後、レコードを stu テーブルに挿入するときに sname フィールドの値を指定する必要があります。そうしないと、エラーが報告されます。

stu(sid) VALUES(1)に挿入します。

挿入されたレコードには sname に指定された値がないため、エラーが報告されます。

4 ユニーク

フィールドに一意の制約を指定することもできます。列に一意制約が指定されている場合、列内の値は一意である必要があります。これは主キーに似ています。たとえば、stu テーブルの sname フィールドに一意制約を指定するには、次のようにします。

テーブル tab_ab を作成します (
     sid INT 主キー AUTO_INCREMENT、
     sname VARCHAR(10) 一意
);
 
  sname(sid, sname) に VALUES(1001, 'zs') を挿入します。
sname(sid, sname) に VALUES(1002, 'zs') を挿入します。

同じ名前を 2 回挿入すると、MySQL がエラーを出します。

5 外部キー

主キーと外部キーはテーブルを関連付ける唯一の方法です。

外部キーは別のテーブルの主キーです。たとえば、従業員テーブルと部門テーブルの間には関連関係があり、従業員テーブルの部門番号フィールドは外部キーであり、部門テーブルに対する外部キーです。

たとえば、t_section テーブルでは、sid 1 のレコードは、java というカテゴリがあることを示しており、モデレーターは t_user テーブルで uid 1 を持つユーザー、つまり zs です。

たとえば、t_topic テーブルでは、tid 2 のレコードは「Java is coffee」という名前の投稿で、これは Java セクションの投稿であり、その作成者は ww です。

外部キーは、この列の値を別のテーブルの主キー値に制限するために使用されます。 ! !

t_user テーブルを作成し、主キー列として uid を指定します。

テーブルt_userを作成します(
     uid INT 主キー AUTO_INCREMENT、
     uname VARCHAR(20) 一意 NOT NULL
);

t_section テーブルを作成し、 sid を主キー列として指定し、 u_id を t_user テーブルの uid 列の外部キーとして指定します。

テーブルt_sectionを作成します(
         sid INT 主キー AUTO_INCREMENT、
         sname VARCHAR(30)、
         u_id INT、
         制約 fk_t_user 外部キー(u_id) 参照 t_user(uid)
);

t_section テーブルを変更し、t_user テーブルの uid 列への外部キーとして u_id を指定します。

ALTER TABLE t_section
制約 fk_t_user を追加する
外部キー(u_id)
参照 t_user(uid);

t_section テーブルを変更し、u_id の外部キー制約を削除します。

ALTER TABLE t_section
外部キー f​​k_t_user を削除します。

6 テーブル間の関係

  • 1対1: たとえば、t_person テーブルと t_card テーブル、つまり人物と ID カード。この場合、マスターとスレーブの関係、つまり、どのテーブルがマスター テーブルで、どのテーブルがスレーブ テーブルであるかを調べる必要があります。個人は ID カードを持っていない可能性がありますが、その個人の下に ID カードが存在する必要があるため、個人はプライマリ テーブル、ID カードはセカンダリ テーブルになります。スレーブ テーブルを設計するには、次の 2 つのオプションがあります。
  • t_card テーブルに外部キー列を追加し (t_user テーブルを基準として)、外部キーに一意の制約を追加します。
  • t_card テーブルの主キーに外部キー制約を追加します (t_user テーブルを基準として)。つまり、t_card テーブルの主キーは外部キーでもあります。
  • 1対多(多対1):最も一般的なのは1対多です。 1対多と多対1、どちらの観点からこれを見ることができるでしょうか? t_user と t_section の関係は、t_user の観点からは 1 対多ですが、t_section の観点からは多対 1 です。この場合、複数のパーティに外部キーが作成されます。
  • 多対多: たとえば、t_stu テーブルと t_teacher テーブルでは、1 人の生徒に複数の教師が割り当てられ、1 人の教師に複数の生徒が割り当てられます。このような状況では通常、多対多の関係を処理するために中間テーブルを作成する必要があります。たとえば、別のテーブル t_stu_tea を作成し、それに t_stu テーブルに対する相対的な外部キーと t_teacher テーブルに対する相対的な外部キーの 2 つを設定します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 知っておくべきSQL文(VIII)データベース整合性制約
  • SQL ステートメントを使用して制約を作成および削除するためのサンプル コード
  • TPフレームワークとSQL文を使用して、データテーブル内のフィールドに特定の値が含まれているかどうかを照会します。
  • Laravelは最後に実行されたSQL文をクエリする方法を実装しています
  • LaravelはネイティブSQL文とメソッド呼び出しを使用します
  • SQL ステートメントを使用してコンピューターからデータベースに写真をインポートする方法
  • MyBatisPlusカスタムSQL文の実装

<<:  Linux ソフトウェアのインストール場所を確認する簡単な方法

>>:  jsで七夕告白連打の効果を実現、jQueryで連打技術を実現

推薦する

element-uiのアップロードコンポーネントでファイルやその他のパラメータを転送する際の問題を分析する

最近、element-ui を統合したプロジェクトで vuethink を使用しました。以前は bo...

layui をベースにしたログインページの実装

この記事の例では、ログインページを実装するためのlayuiの具体的なコードを参考までに共有しています...

スライダー効果を実装するミニプログラム

この記事の例では、スライディングブロック効果を実現するための小さなプログラムの具体的なコードを参考ま...

Ubuntu のインストール グラフィック ドライバーと Cuda チュートリアル

目次1. 元のドライバーをアンインストールする2. 新しいグラフィックカードドライバーをダウンロード...

vueはel-tableの列幅の適応を完璧に実現します

目次背景技術的ソリューション具体的な実装要約する背景Element UI は、PC で人気の Vue...

Mac 向け MySQL のインストールと設定のチュートリアル

この記事では、MacでのMySQLインストールチュートリアルを参考までに紹介します。具体的な内容は次...

JS配列の一般的な方法とテクニックを学び、マスターになりましょう

目次splice() メソッドjoin() メソッド逆() メソッドevery() メソッド削減()...

Vueスロットの実装原理についての簡単な説明

目次1. サンプルコード2. 現象を通して本質を見抜く3. 実施原則4. 親コンポーネントのコンパイ...

自己終了XHTMLタグを書くときに注意すべきこと

XHTML の img タグはいわゆる自己終了タグであり、XML では完全に合法です。 XHTMLの...

Ubuntu 18.04 で MySQL のインストール時にパスワードが要求されない場合の解決方法

Ubuntu 1804 への MySQL 5.7 のインストールについて詳しく紹介します。 MySQ...

Vue開発の詳細な説明 ソートコンポーネントコード

目次 <テンプレート> <ul class="コンテナ">...

ウェブサイトはグレー表示されています。画像を含む互換コードはすべてのブラウザをサポートしています

通常、国喪の日、大地震の日、清明節には、ウェブサイト全体を灰色にして、故人への哀悼の意を表します。そ...

Nginx リバース プロキシを使い始める

目次概要リバースプロキシの役割Nginx リバース プロキシ イントラネット侵入 8081 ポートの...

Linux環境にDocker環境をインストールする(落とし穴なし)

目次インストールの前提条件ステップ1: システムの残りを確認してクリアし、Dockerの依存関係をイ...

Ubuntu で XFS ファイルシステム用の LVM を作成する方法

序文lvm (論理ボリューム マネージャー) 論理ボリューム管理は、Linux システムのニーズを満...