[MySQL] テーブル整合性制約 - 非外部キー制約

まず、テーブルの整合性制約

        準拠していないデータがデータベースに保存されるのを防ぐために、MySQL は、ユーザーがデータを挿入、変更、削除するときに、データベース内のデータが指定された条件を満たしているかどうかをチェックして、データベース内のデータの正確性を保証するメカニズムを提供します。一貫性と一貫性、このメカニズムは整合性制約です。

        MySQL は、表に示すように、主に次のタイプの整合性制約をサポートします。Check 制約は MySQL8 で提供されるサポートです。

 

2. 非外部キー制約

1. 主キー制約と自動インクリメント制約

主キー制約は、主キー制約がフィールドに追加された場合、このフィールドの値によってレコードを一意に識別できることを意味します。自動インクリメント制約は、制約されたフィールドの値が自動的にインクリメントされることを意味します。主キー制約と自己インクリメント制約は通常、一緒に使用され、制約シーケンス番号でよく使用されます。

自動インクリメント制約 (AUTO_INCREMENT) を使用すると、テーブル内のフィールドの値を自動的に増やすことができます。テーブル内に自動インクリメント フィールドは 1 つだけ存在でき、そのフィールドには制約が定義されている必要があります (制約には、主キー制約、一意制約、および外部キー制約を指定できます)。自動インクリメント フィールドで制約が定義されていない場合、データベースでは、「テーブル定義が正しくありません。自動列は 1 つだけ使用でき、キーとして定義する必要があります」というエラーが表示されます。

自動インクリメント制約は一意の ID を自動的に生成するため、通常、自動インクリメント制約は主キーとともに使用され、整数型にのみ適用されます。一般に、自動インクリメント制約フィールドの値は 1 から始まり、レコードが追加されるたびにフィールドの値は 1 ずつ増加します。

create   table student(
       stu_id int(10) primary key,
       stu_name varchar(3),
       stu_sex varchar (1)
);
/*为student表中的主键字段添加自增约束*/
alter   table student11 modify stu_id int(10) auto_increment;

ALTER TABLE ステートメントを使用して、自動インクリメント制約を削除します。

alter table student modify stu_id int(10);

2. 空ではない制約

制約されたフィールド値を空にすることはできません。

3. 固有の制約

一意制約のあるフィールドの値を繰り返すことはできません。

4. 制約をチェックする

チェック制約を追加する場合、値の範囲を設定でき、範囲を満たさない値はデータベーステーブルに追加されません。

5. デフォルト値の制約

デフォルト値制約をフィールドに追加した後、フィールドに値が渡されない場合は、デフォルト値が使用されます。

3. 非外部キー制約の分類

非外部キー制約は、機能の観点から 2 つのカテゴリに分類できます。

  • テーブルレベルの制約: テーブル内の 1 つ以上のフィールドを制約できます。これは列定義から独立しており、列定義には含まれません。定義とはカンマで区切られます。制約される列の名前を指定する必要があります。次に例を示します。
    constraint pk_stu primary key (sno)  -- pk_stu 主键约束的名字
  • 列レベルの制約: 列定義に含まれ、その列の他の定義の直後にスペースで区切られます。列名は必要ありません。次に例を示します。
    sno int(6) primary key auto_increment

1.列レベルの制約を使用してテーブルを作成します。文法構造は次のとおりです:列名、列タイプ制約名

学生データを含むテーブルを作成するときに、さまざまな非外部キー制約をテーブルに追加します。

create table t_student(
	sno int(6) primary key auto_increment, -- 自增约束+主键约束
	sname varchar(5) not null, -- 非空约束
	sex char(1) default '男' check(sex='男' || sex='女'), -- 检查约束+默认值约束
	age int(3) check(18<=age<35),
	enterdate date,
	classname varchar(10),
	email varchar(15) unique -- 唯一约束
);

2.テーブル レベルの制約を使用してテーブルを構築します。文法構造は次のとおりです:制約 この制約に付けられた名前 制約名 (フィールド名 + 条件)

学生データを含むテーブルを作成するときに、さまざまな非外部キー制約をテーブルに追加します。

create table t_student(
        sno int(6) auto_increment, 
        sname varchar(5) not null, 
        sex char(1) default '男',
        age int(3),
        enterdate date,
        classname varchar(10),
        email varchar(15),
        constraint pk_stu primary key (sno),  -- pk_stu 主键约束的名字
        constraint ck_stu_sex check (sex = '男' || sex = '女'),
        constraint ck_stu_age check (age >= 18 and age <= 50),
        constraint uq_stu_email unique (email)
);

テーブル レベルの制約を記述する別の方法もあります。これは、テーブルの作成後に SQL ステートメントを使用して制約を追加することです。次に例を示します。

alter table t_student add constraint pk_stu primary key (sno) ; -- 主键约束
alter table t_student modify sno int(6) auto_increment; -- 修改自增条件
alter table t_student add constraint ck_stu_sex check (sex = '男' || sex = '女');
alter table t_student add constraint ck_stu_age check (age >= 18 and age <= 50);
alter table t_student add constraint uq_stu_email unique (email);

おすすめ

転載: blog.csdn.net/hold_on_qlc/article/details/129806437