MySQL データベース - 制約 (概要、制約のデモンストレーション、外部キー制約、削除/更新動作)

目次

概要

制約のデモンストレーション

テーブルの作成

確認する

グラフィカルインターフェースの制約

外部キー制約

コンセプト

文法

外部キーの削除/更新動作

要約する


概要

  1. 概念: 制約は、テーブル内のフィールドに作用して、テーブルに格納されるデータを制限するルールです。
  2. 目的: データベース内のデータの正確性、有効性、完全性を保証するため。
  3. 分類:
制約 説明する キーワード
非NULL制約 このフィールドのデータを NULL にすることはできません NULLではありません
一意の制約 このフィールド内のすべてのデータが一意であり、重複していないことを確認してください 個性的
主キー制約 主キーはデータ行の一意の識別子であり、空ではなく一意である必要があります。 主キー
デフォルトの制約 データを保存するときに、このフィールドの値が指定されていない場合は、デフォルト値が使用されます。 デフォルト
チェック制約 (バージョン 8.0.16 以降) 特定の条件を満たすフィールド値を保存する チェック
外部キー制約 2 つのテーブルのデータ間の接続を確立し、データの一貫性と整合性を確保するために使用されます。 外部キー

制約のデモンストレーション

テーブルの作成

必要に応じてフォームの作成を完了します。

フィールド名 フィールドの意味 フィールドタイプ 制限 制約キーワード
ID ID 一意の識別子 整数 主キー、および自動的に増加します 主キー、AUTO_INCREMENT
名前 名前 varchar(10) 空ではなく、ユニークです NULL ではありません、一意です
整数 0より大きく120以下 チェック
状態 文字(1) この値が指定されていない場合、デフォルトは 1 になります。 デフォルト
性別 性別 文字(1) なし

自動拡張: テーブル内の行数に応じて ID が自動的に増加します。キーワードは auto_increment です。

create table user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null unique comment '姓名',
    age int check(age > 0 and age <= 120) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
) comment '用户表';

確認する

1. 主キーと自動拡張

データを挿入するときにIDを入力しません

create table user(
    id int primary key auto_increment comment '主键',
    name varchar(10) not null unique comment '姓名',
    age int check(age > 0 and age <= 120) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
) comment '用户表';

このとき、id が主キーとして使用されており、自動拡張制約があり、行数が増えると自動的に増加するため、入力する必要がないことがわかりました。

2. 名前は空ではなく一意です

名前の入力が空の場合、エラーが報告されます。また、名前が繰り返されると、挿入された値の主キーを適用した後、実際には挿入されないため、ID 値は 1 ずつジャンプします。(たとえば、 :1、2、3、5)

3. 年齢は 0 より大きく 120 歳以下でなければなりません

4. ステータスが指定されていない場合、デフォルトは 1 です。

insert into user (name,age,gender)
            values ('Jack6',18,'男');

グラフィカルインターフェースの制約

外部キー制約

コンセプト

外部キーは、2 つのテーブル内のデータ間の接続を確立し、データの一貫性と整合性を確保するために使用されます。

注: 現在、上記の 2 つのテーブルはデータベース レベルで外部キー関係を確立していないため、データの一貫性と整合性は保証できません。 

つまり、部門テーブルの研究開発部門を削除しても、従業員テーブルの研究開発部門の従業員は削除されず、データの整合性の問題が発生します。

文法

外部キーを追加する

CREATE TABLE 表名(
    字段名 数据类型,
    ...
    [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主列表名)
);

-- 或
ALTER TABLE 表名 
    ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名);

外部キーの削除

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

alter table emp 
    add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

alter table emp drop foreign key fk_emp_dept_id;

 

外部キーの削除/更新動作

行動 説明する
何もしない 親テーブルの対応するレコードを削除/更新する場合は、まずそのレコードに対応する外部キーがあるかどうかを確認し、存在する場合は削除/更新を許可しません。(制限と同じ)
制限 親テーブルの対応するレコードを削除/更新する場合は、まずそのレコードに対応する外部キーがあるかどうかを確認し、存在する場合は削除/更新を許可しません。(NO ACTIONと一致)
カスケード 親テーブルの該当レコードを削除・更新する場合は、そのレコードに対応する外部キーがあるかどうかを確認し、あれば子テーブルの外部キーを持つレコードを削除・更新します。
NULL を設定 親テーブルの対応するレコードを削除する場合は、まずそのレコードに対応する外部キーがあるかどうかを確認し、存在する場合は子テーブルの外部キーの値をnullに設定します(外部キーがnullを許可する必要があります)。
デフォルトを設定 親テーブルが変更されると、子テーブルは外部キー列をデフォルト値に設定します (Innodb はこれをサポートしません)
ALTER TABLE 表名 
    ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCE 主表 (主列表名)
        ON UPDATE CASCADE ON DELETE CASCADE;

デモ

alter table emp
    add constraint fk_emp_dept_id foreign key (dept_id) references dept(id)
        on update cascade  on delete  cascade ;

 このとき、メインテーブルの研究開発部門のIDを6に変更します。

 サブテーブルも更新されます。 

 

要約する

  1. 非NULL制約: NOT NULL
  2. 一意の制約: UNIQUE
  3. 主キー制約: PRIMARY KEY (増分: AUTO_INCREMENT)
  4. デフォルトの制約: DEFAULT
  5. チェック制約: CHECK
  6. 外部キー: FOREIGN KEY

終わり


学習内容: ダークホース プログラマー - MySQL データベース コース

おすすめ

転載: blog.csdn.net/li13437542099/article/details/132378896
おすすめ