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 リンク タグ タイトル属性 改行 マウス ホバー プロンプト コンテンツ 改行効果

オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...

uni-app WeChatアプレット認証ログイン実装手順

目次1. appIDの申請と設定1. appidの取得方法2. AppIDの設定2. 基本的なユーザ...

src 属性と href 属性の違い

src と href には違いがあり、混同される可能性があります。 src は現在の要素を置き換える...

Docker を使用してフロントエンド アプリケーションをデプロイする方法

Dockerはますます普及しています。環境を軽量かつ柔軟に分離し、容量を拡張し、運用保守管理を容易に...

JavaScript を使用して QR コードを解析する 3 つの方法

目次1. JavaScriptを使用してQRコードを解析する1. QR コードとは何ですか? 2.q...

興味深いカウントダウン効果を実現するjs

js興味深いカウントダウンケース、参考までに、具体的な内容は次のとおりですコード: <!DO...

デザイン理論:フォントデザインの基礎

<br />言葉は、人間の思考や感情を伝えるために必然的に生み出されるものです。人類の文...

Docker で Zookeeper をインストールする (スタンドアロンおよびクラスター)

Docker を起動したら、利用できるオプションを見てみましょう。 公式のものがある場合は、もちろ...

Vue の新しい組み込みコンポーネントの使用方法の詳細な説明

目次1. テレポート1.1 テレポートの紹介1.2 テレポートの使用1.3 プレビュー効果2. サス...

WeChatアプレット開発の章:落とし穴の記録

最近、会社初のミニプログラムの開発に参加しました。開発経験は基本的にWebViewをベースとしたハイ...

Linux で ss コマンドと zabbix を組み合わせてソケットを監視する方法の詳細な説明

目次序文1. ssコマンド2. Zabbix監視マシンの全体的なソケットステータス2.1. スクリプ...

Reactにおけるキーの役割の詳細な説明

目次質問: ボタンをクリックすると、スパンの色が赤に変わりますか?上記の問題を分析します。 2番目の...

写真とテキストによる MySQL 8.0.21 インストール チュートリアル

1. ダウンロードリンクをダウンロードするダウンロードをクリックします。Oracle アカウントにロ...

Youku 動画から 30 秒の広告コードを削除する 2 つの方法

誰もがこんな気持ちになったことがあると思います。30 秒の広告が入った動画を見ると、とても不快に感じ...