まず、テーブルの整合性制約
準拠していないデータがデータベースに保存されるのを防ぐために、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);