外部キーコンストレイント
テーブルAのプライマリ・キーがテーブルBのフィールドである場合、このフィールドはテーブルBの外部キー、テーブルAはプライマリ・テーブル、テーブルBはスレーブ・テーブルと呼ばれる.外部キーは参照整合性を実現するために使用され、異なる外部キー制約方式により、2つのテーブルを緊密に結合することができ、特に修正または削除されたカスケード操作により、日常的なメンテナンス作業がより容易になります.ここではMySQLを例に,3つの外部キー制約方式の違いと関連をまとめる.
ここでは、ユーザテーブルとユーザグループテーブルを例にとると、これは典型的な多対一関係であり、複数のユーザが1つのユーザグループに対応する.
まず、ユーザー・グループ・テーブルを作成します.
2つのレコードを挿入します.
次に、ユーザー・テーブルを作成し、外部キー参照関係をそれぞれ異なる制約で作成します.
1、カスケード方式
参照整合性テスト
コンストレイント方式テスト
2、セットnull方式
3、禁止(no action/restrict)方式
ここでは、ユーザテーブルとユーザグループテーブルを例にとると、これは典型的な多対一関係であり、複数のユーザが1つのユーザグループに対応する.
まず、ユーザー・グループ・テーブルを作成します.
create table t_group (
id int not null,
name varchar(30),
primary key (id)
);
2つのレコードを挿入します.
insert into t_group values (1, 'Group1');
insert into t_group values (2, 'Group2');
次に、ユーザー・テーブルを作成し、外部キー参照関係をそれぞれ異なる制約で作成します.
1、カスケード方式
create table t_user (
id int not null,
name varchar(30),
groupid int,
primary key (id),
foreign key (groupid) references t_group(id) on delete cascade on update cascade
);
参照整合性テスト
insert into t_user values (1, 'qianxin', 1); --
insert into t_user values (2, 'yiyu', 2); --
insert into t_user values (3, 'dai', 3); -- , , 3 ,
コンストレイント方式テスト
insert into t_user values (1, 'qianxin', 1);
insert into t_user values (2, 'yiyu', 2);
insert into t_user values (3, 'dai', 2);
delete from t_group where id=2; -- t_user 2、3
update t_group set id=2 where id=1; -- t_user 1 groupid 2
2、セットnull方式
create table t_user (
id int not null,
name varchar(30),
groupid int,
primary key (id),
foreign key (groupid) references t_group(id) on delete set null on update set null
);
insert into t_user values (1, 'qianxin', 1); --
insert into t_user values (2, 'yiyu', 2); --
insert into t_user values (3, 'dai', 3); -- , , 3 ,
insert into t_user values (1, 'qianxin', 1);
insert into t_user values (2, 'yiyu', 2);
insert into t_user values (3, 'dai', 2);
delete from t_group where id=2; -- t_user 2、3 groupid NULL
update t_group set id=2 where id=1; -- t_user 1 groupid NULL
3、禁止(no action/restrict)方式
create table t_user (
id int not null,
name varchar(30),
groupid int,
primary key (id),
foreign key (groupid) references t_group(id) on delete no action on update no action
);
insert into t_user values (1, 'qianxin', 1); --
insert into t_user values (2, 'yiyu', 2); --
insert into t_user values (3, 'dai', 3); -- , , 3 ,
insert into t_user values (1, 'qianxin', 1);
insert into t_user values (2, 'yiyu', 2);
insert into t_user values (3, 'dai', 2);
delete from t_group where id=2; -- , ,
update t_group set id=2 where id=1; -- , ,