MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介

MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介

非準拠データがデータベースに入るのを防ぐために、ユーザーがデータを挿入、変更、削除、その他の操作を行うと、DBMS は特定の制約に従ってデータを自動的に監視し、非準拠データがデータベースに入るのを防ぎ、データベースに保存されているデータが正確で有効かつ互換性があることを保証します。

#データ制約

#5 つの整合性制約:
#NOT NULL: NULL ではない制約。列が空にならないことを指定します。
#UNIQUE: 一意制約。列または列の組み合わせが繰り返されないことを指定します。#PRIMARY KEY: 主キー。この列の値によって、この列のレコードを一意に識別できることを指定します。#FOREIGN KEY: 外部キー。この行レコードがプライマリ テーブルのレコードに属していることを指定します。主に参照整合性に使用されます。#CHECK: チェック。対応する値が式を満たす必要があることを指定するブール式を指定します (mysql はチェック制約をサポートしていません)
#--------------------------------NOT NULL 空でない制約---------------------------
テーブル test4 を作成する
(
  #非null制約を作成する id int not null,
名前varchar(55) デフォルト 'ABCD' nullではない、
#デフォルト値はnullです
年齢 int null
);
#空でない制約をキャンセルする alter table test4
 名前を変更するvarchar(55) デフォルト 'ABCD' はnullではありません。
#空でない制約を追加する alter table test4
 年齢を変更する int は null ではありません。
#--------------------------------UNIQUE: 一意制約--------------------------------
#制約を作成するための列レベルの制約構文 create table test_unique
 (
 #行レベルの一意制約を作成する id int not null unique,
 年齢 int
 );
 #テーブルレベルの制約構文フォーマット create table unique_test3
 (
test6_id int が null ではない、
test6_name varchar(255)、
test6_pass varchar(255)、
#テーブルレベルの制約構文を使用して、test6_id列とtest6_name列の組み合わせが繰り返されないように指定する一意制約を作成します。constraint test6_unique unique(test6_id,test6_name)、
#テーブルレベルの制約構文を使用して、一意の制約を作成します。制約名は test6_unique_2 です。test6_pass は繰り返すことができません。constraint test6_unique_2 unique(test6_pass)
 );
 # 一意制約を追加するキーワードを追加 alter table test4
 unique(id,name,age)を追加します。
 #modify キーワードを削除または追加して一意制約を変更する alter table test4
 年齢を変更するvarchar(255)はnullではありません。
 テーブルを変更するテスト4
 年齢を変更するvarchar(255) nullではない一意;
 #ほとんどのデータベースでは、制約を削除するには、次のようにします: alter table table name drop constraint 制約名 #ただし、MySQL ではこの方法は使用されません。代わりに、次のようにします: alter table table name drop index 制約名 #--------------------------------PRIMARY KEY: 主キー制約--------------------------------
 #主キー制約は、非 NULL 制約および一意制約と同等です。
 #各テーブルには主キーを 1 つだけ持つことができますが、この主キーは複数のデータ列で構成でき、これらの列の組み合わせを繰り返すことはできません。#標準 SQL では主キーに自分で名前を付けることができますが、MySQL では独自の名前は効果がなく、デフォルトで常に PRIMARY という名前になります。
 primary_testテーブルを作成する
 (
#列レベルの構文を使用して主キー制約を作成します test_id int primary key,
テスト名 varchar(255)
 );
 #テーブルレベルの構文を使用して主キー制約を作成します。create table primary_test2
 (
test_id int が null ではない、
テスト名varchar(255)、
テストパスvarchar(255)、
#主キー制約名 test2_pk を指定します。これはほとんどのデータベースで有効ですが、mysql では有効ではありません。主キー制約名は PRIMARY のままです。
制約 test2_pk 主キー (test_id)
 );
 #複数の列を持つ主キーを作成する create table primary_test3
 (
テストID int,
テスト名varchar(255)、
主キー(test_id,test_name)
 );
 #列レベルの制約構文を使用する alter table primary_test3
 test_id int 主キーを変更します();
 #テーブルレベルの制約構文を使用する alter table primary_test3
 主キー(test_id、test_name)を追加します。
 #主キー制約を削除します: alter table table name drop primary key;
 #主キー列の自己増分機能: データ列の型が整数で、列が主キー列として使用されている場合、列に自己増分機能があることを指定できます。#MySQL は auto_increment を使用して自己増分を設定します。テーブルにレコードを挿入するときに、列の値を指定する必要はありません。システムが列の値を生成します。create table primary_test3
 (
//主キー制約を作成し、自動増分テストIDを設定 int auto_increment primary key、
テスト名 varchar(255)
 );
 #外部キー制約 FOREIGN KEY
 #MySQLでは、テーブルレベルの構文で作成された外部キー制約のみが有効になります。#参照マスターテーブルの存在を確認するには、まずマスターテーブルを作成します。create table teacher_tb
 (
t_id int 自動増分、
t_name varchar(255)、
主キー(t_id)
 );
 テーブルstudent_tbを作成する
 (
s_id int auto_increment 主キー、
s_name varchar(255) NULLではない、
t_java 整数、
外部キー(t_java)はteacher_tb(t_id)を参照します。
 );
#テーブルレベルの制約構文を使用する場合は、外部キーを使用してこのテーブルの外部キー列を指定する必要があります。外部キー制約を作成するときに制約名を指定しないと、
#MySQL は外部キー制約に table_name_ibfk_n という名前を付けます。ここで、table_name はテーブル名、n は 1 から始まる整数です。create table teacher_tb2
 (
t_id int 自動増分、
t_name varchar(255)、
主キー(t_id)
 );
 テーブルstudent_tb2を作成する
 (
s_id int auto_increment 主キー、
s_name varchar(255) NULLではない、
t_java 整数、
制約 student_teacher_fk 外部キー(t_java) は teacher_tb2(t_id) を参照します。
 );
 #複数列の複合外部キー制約を確立する create table teacher_tb5
 (
t_name varchar(255)、
t_pass varchar(255)、
主キー(t_name,t_pass)
 );
 テーブルstudent_tb5を作成する
 (
s_id int auto_increment 主キー、
s_name varchar(255) NULLではない、
t_java_pass varchar(255)、
t_java_name varchar(255)、
外部キー(t_java_name、t_java_pass) 
  teacher_tb5(t_name,t_pass)を参照します
 );
 #外部キー制約を削除する alter table student_tb2
 外部キー student_teacher_fk を削除します。
 #外部キー制約を追加する alter table student_tb2
 外部キー(t_java)参照をteacher_tb2(t_id)に追加します。
 #外部キー制約はそれ自体を参照します。自己制約 create table foreign_test9
 (
foreign_id int auto_increment 主キー、
外部名 varchar(255)、
参照ID int,
外部キー(refer_id)はforeign_test9(foreign_id)を参照します。
 );
 # マスター テーブル レコードが削除されると、スレーブ テーブル レコードも削除されることを定義します # 削除時にカスケード削除すると、マスター テーブル レコードを参照するすべてのスレーブ テーブル レコードが削除されます # 削除時に null 設定すると、マスター テーブル レコードを参照するスレーブ テーブル レコードが null に設定されます
 テーブルteacher_tb8を作成する
 (
t_id int 自動増分、
t_name varchar(255)、
主キー(t_id)
 );
 テーブルstudent_tb8を作成する
 (
s_id int auto_increment 主キー、
s_name varchar(255) NULLではない、
t_java 整数、
制約 student_teacher_fk 外部キー(t_java) は削除カスケードで teacher_tb8(t_id) を参照します
 );

要約する

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

以下もご興味があるかもしれません:
  • MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明
  • MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します
  • MySQLデータベースのデータテーブルに関する詳細な基本操作
  • MySQLはデータテーブル内の既存のテーブルを分割します
  • MySQL データベースの制約とデータ テーブルの設計原則

<<:  react+antdプロジェクトをゼロから構築する方法を教えます

>>:  Nginx の書き換え正規マッチング書き換え方法の例

推薦する

Linux parted ディスク パーティション実装手順の分析

fdisk と比較すると、parted はあまり使用されず、主に 2T を超えるパーティションに使用...

任意の長さの配列を作成または埋めるための JS のヒントの要約

目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...

HTML 基本要約推奨事項 (タイトル)

HTML: タイトル見出しは <h1> - <h6> などのタグによって定...

Linux lsコマンドの使用

1. はじめにls コマンドはディレクトリの内容を表示するために使用され、Linux で頻繁に使用さ...

CSSをインポートする方法は何ですか?linkと@importの違いは何ですか?選択方法

Taobao のウェブページはインポートを使用していますが、多くのウェブサイトはリンクを使用していま...

js はマウスインとマウスアウトによるカード切り替えコンテンツを実装します

この記事では、マウスでカード内外のコンテンツを切り替えるためのjsの具体的なコードを紹介します。具体...

Win10でのMySQL5.7.17無料インストール版の基本設定チュートリアルについて(画像とテキスト付き)

データベース アプリケーションは、アプリケーション システムに不可欠な部分です。リレーショナル デー...

ナビゲーションバーコンポーネントをVueでカプセル化する

はじめに:ナビゲーション バーなどのコンポーネント ベースのアイデアを使用して機能モジュールを完全に...

ドラッグフォトウォールを実現するネイティブJS

この記事では、ネイティブ JS で実装されたドラッグ可能な写真ウォールを紹介します。効果は次のとおり...

Windows DNS サーバーに「ワームレベル」の脆弱性が露呈、17 年間存在

脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...

CentOS 7 で MySQL 8 の複数のインスタンスを設定する詳細なチュートリアル (必要な数だけ設定できます)

原因最近、プロジェクトのリファクタリングを始めたのですが、マスタースレーブと読み取り書き込み分離を使...

Nginx での Frp による https への強制リダイレクト設定の詳細な説明

自宅のルーターが300Mの帯域幅を80Mに強制的に減らしたため、3205Uソフトルーターを購入しまし...

TypeScript でオブジェクト キーの値の範囲を制限する方法

TypeScript を使用する場合、TypeScript が提供する型システムを使用してコードのあ...

MySQL でインデックスとして B+Tree を使用する利点は何ですか?

目次データベースにインデックスが必要なのはなぜですか?インデックスが B+Tree データ構造を使用...