MySQL 制約の種類と例

MySQL 制約の種類と例

制約

  • 制約によりデータの整合性と一貫性が確保される
  • 制約はテーブルレベルの制約と列レベルの制約に分けられます
  • 制約タイプには、NOT NULL (空でない制約)、PRIMARY KEY (主キー制約)、UNIQUE KEY (一意制約)、DEFAULT (デフォルト制約)、FOREIGN (外部キー制約) などがあります。

1. 主キー制約

  • 主キー
  • 各データテーブルには主キーを1つだけ設定できます
  • 主キーはレコードの一意性を保証し、主キーの値は重複しません。
  • 主キーは自動的にNOT NULLになります

たとえば、学生テーブルを作成し、学生番号を主キーとして設定します。テーブルを作成したら、SHWO COLUMNS FROM studentでテーブル構造を表示します。

学生テーブルを作成(
id int 主キー、
stu_name varchar(20)
);

2. ユニーク制約

  • ユニークキー
  • ユニーク制約はレコードのユニーク性を保証することができる
  • 一意制約フィールドにはヌル値(NULL)を設定できます。
  • 各データテーブルには複数の一意の制約を設定できます

たとえば、自動インクリメントの id フィールドと一意の tea_name フィールドを持つ teacher テーブルを作成します。

教師テーブルの作成(
id int AUTO_INCREMENT 主キー、
tea_name varchar(20) NOT NULL 一意キー
);

3. デフォルトの制約

  • デフォルト
  • レコードを挿入するときに、フィールドに値が明示的に割り当てられていない場合は、デフォルト値が自動的に割り当てられます。

たとえば、デフォルトの授業時間が 40 分であるコース テーブルを作成します。

CREATE TABLEコース(
id int AUTO_INCREMENT 主キー、
cou_name varchar(20) NOT NULL UNIQUE KEY、
時間 int デフォルト 40
);
Course(cou_name) に値('Chinese') を挿入します。

4. 非NULL制約

  • NULLではない
  • 列に NULL 値を指定できないように強制し、制約によってフィールドに常に値が含まれるように強制します。
  • つまり、フィールドに値を追加せずに新しいレコードを挿入したり、レコードを更新したりすることはできません。

たとえば、「Persons」テーブルを作成する場合は、Id 列と name 列に NOT NULL 制約を作成します。

テーブルPersonsを作成する(
id int NULLではない、
p_name varchar(20) NULLではない、 
部門varchar(20)、
アドレスvarchar(20)、
電話番号varchar(20)
)
DESC 人物;

5. 外部キー制約

  • 外部キー
  • データの一貫性と整合性を維持する
  • 1対1または1対nの関係を実装する

1. 親テーブルと子テーブルは同じストレージ エンジンを使用する必要があり、一時テーブルは禁止されています。
2. データテーブルのストレージエンジンはInnoDBのみ
3. 外部キー列と参照列のデータ型は類似している必要があります。数字の長さと符号ビットの有無は同じである必要がありますが、文字の長さは異なっていてもかまいません。
4. 外部キー列と参照列に対してインデックスを作成する必要があります。外部キー列にインデックスが存在しない場合は、MySQL によって自動的にインデックスが作成されます。

テーブル学校を作成(
id int AUTO_INCREMENT 主キー、
sname varchar(20) NULLではない
);
テーブル学生2を作成します(
id int AUTO_INCREMENT 主キー、
sid int、
外部キー (sid) 参照 school(id)
);

外部キー制約の参照操作

  • CASCADE : 親テーブルから削除または更新し、子テーブル内の一致する行を自動的に削除または更新します。
  • 親テーブルの参照列からデータが削除されると、対応するデータを含む行が子テーブルから削除されます。
テーブルstudent3を作成します(
id int AUTO_INCREMENT 主キー、
sid int、
外部キー (sid) 参照 school(id) ON DELETE CASCADE
);
  • SET NULL: 親テーブルから行を削除または更新し、子テーブルの外部キー列を NULL に設定します。このオプションを使用する場合は、子テーブルの列に NOT NULL が指定されていないことを確認する必要があります。
  • 親テーブルからデータを削除し、子テーブルの参照をNULLに設定します。
  • RESTRICT: 親テーブルに対する削除または更新操作を拒否します
  • NO ACTION: MySQL の RESTRICT に相当する標準 SQL キーワード。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL 整合性制約の例の詳細な説明
  • MySQL 制約の超詳細な説明
  • MySQL の 6 つの一般的な制約タイプの詳細な説明
  • MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介
  • MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します

<<:  Linux での umask の使用に関する詳細な説明

>>:  Vue3 でマークダウン エディター コンポーネントを使用する方法

推薦する

HTML テーブルインライン形式の詳細な説明

インライン形式<colgroup>...</colgroup>属性名 属性値...

CentOS7におけるKVM仮想化の基本管理の詳しい説明

1. kvm仮想化をインストールする : : : : : : : : : : : : : : : :...

MySQL ストレージ エンジン MyISAM と InnoDB の違いの概要

1. MySQLのデフォルトストレージエンジンの変更MySQL 5.1 より前のバージョンでは、デフ...

WindowsはVMwareを使用してLinux仮想マシンを作成し、CentOS7.2オペレーティングシステムをインストールします。

目次1. ウィザードに従って仮想マシンを作成します2. オペレーティングシステムをインストールします...

XHTML でのハイパーリンク タグの使用に関するチュートリアル

ハイパーリンク。「リンク」とも呼ばれます。ハイパーリンクは、私たちが閲覧する Web ページのいたる...

mysql8.0.12 でルートパスワードをリセットする方法

データベースをインストールした後、誤ってインストール ウィンドウを閉じたり、長期間 root ユーザ...

Windows 10 システムで nginx ファイル サーバーを構成するためのグラフィック チュートリアル

Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...

表の境界線の CSS 構文

<br />表の境界線の CSS 構文具体的な内容には、上境界線の幅、右境界線の幅、下境...

react+reduxを使用してカウンター機能を実装すると発生する問題

Redux はシンプルな状態マネージャーです。その歴史をたどることはしません。使用法の観点から見ると...

MySqlサブクエリINの実装と最適化

目次IN が遅いのはなぜですか? INとEXISTSのどちらが速いでしょうか?効率を向上させるにはど...

指定された期間内のすべての日付または月を取得する MySQL ステートメント (ストアド プロシージャの設定やテーブルの追加は不要)

mysql は期間内のすべての日付または月を取得します1: mysqlは期間内のすべての月を取得し...

HTML レイヤード ボックス シャドウ効果のサンプル コード

まず、画像を見てみましょう。今日はこのエフェクトを作成します。 実は、何でもないんです。Web ペー...

CSS でマウスの位置をマッピングし、マウスを動かしてページ要素を制御する (サンプル コード)

マウスの位置をマッピングしたり、ドラッグ効果を実装したりすることは、 JavaScriptで行うこと...

Vue+WebSocket ページでの長時間接続のリアルタイム更新

最近、Vue プロジェクトではデータをリアルタイムで更新する必要があります。折れ線グラフは 1 秒ご...

Spring Boot 階層化パッケージング Docker イメージの実践と分析 (推奨)

目次1. Springbootプロジェクトを準備する2. 関連する設定を実行する3.パッケージ4.D...