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 でマークダウン エディター コンポーネントを使用する方法

推薦する

Nginx のリロード プロセスの背後にある真実を探る

本日の記事では、主にNginxのリロードプロセスについて紹介します。実は前回の記事では、nginx ...

CocosCreatorでJSZip圧縮を使用する方法

CocosCreator バージョン: 2.4.2 jszipの実践的なプロジェクトアプリケーション...

Docker ログが多すぎてディスクがいっぱいになる場合の対処方法

複数の Docker コンテナがデプロイされたサーバーがあり、各 Docker コンテナが stde...

数字当てゲームを実装するための純粋なJavaScript

100 以内の自然数をランダムに選択し、プレイヤーに 10 ラウンド以内にその数を推測させる数字推...

CSS コード省略 div+css レイアウト コード省略仕様

略語を使用すると、CSS ファイルのサイズが小さくなり、読みやすくなります。 CSS 省略形の主なル...

Tomcatのサーバーオプションの詳細な説明

1. 構成デフォルトでは、最初の 2 つはチェックされていないので、チェックする必要があります。 (...

Linux でファイルを削除するさまざまな方法の効率の比較

Linux で大量のファイルを削除する効率をテストします。まず500,000個のファイルを作成する$...

MySQL クラスタの詳細な説明: 1 つのマスターと複数のスレーブのアーキテクチャ実装

実験環境: 1. CentOS 7 サーバー 3 台2. mysql5.7.26 (3台のマシンはす...

CentOS 7 はネットワークカードを変更した後、インターネットにアクセスできません

不明なドメイン名 www.baidu.com を Ping するホストのIPアドレスを変更する右クリ...

Flinkのフォールトトレラントメカニズムに関する簡単な説明:ジョブ実行とデーモン

目次1. ジョブ実行のフォールトトレランス1.1 タスクフェイルオーバー戦略1.2 ジョブ再開戦略2...

Element+vueを使用して開始時間と終了時間の制限を実装する

この記事の例では、Element+vueを使用して開始と終了の時間制限を実装するための具体的なコード...

CSS エクスペリエンスを充実させる 5 つの便利な CSS セレクターを紹介します

Web デザイナーとして豊富な CSS 経験を持つ私たちは、あらゆる種類のコード構文、互換性、スニペ...

テキストエリアのテキストをHTMLに変換する方法、つまり復帰改行について

説明: テキストエリアの値の改行を新しい行に変更しますコードをコピーコードは次のとおりです。 <...

JavaScript オブジェクト指向クラス継承ケースの説明

1. オブジェクト指向のクラス継承これまでの章では、JavaScript のオブジェクト モデルがプ...

HTML要素のID属性とName属性の違い

今日、私は <a href="#13"></a> につい...