on delete cascade
on update cascade
-- 关联数据更新 , 主表对数据进行删除/修改 , 那么从表的数据也会跟着同步更新
一对多
create table country(
id int primary key auto_increment,
country_name varchar(10) not null
);
create table role(
id int primary key auto_increment,
role_name char(5) not null,
-- 设置一个外键与国家表进行关联
country_id int,
foreign key (country_id) references country(id) on delete cascade on update cascade
);
insert into country(country_name) values
('魏国'),
('蜀国'),
('吴国');
insert into role(role_name ,country_id) values
('曹操',1),
('张辽',1),
('甄姬',1),
('诸葛亮',2),
('周瑜',3);
update country set country_name='555' where id=3; -- 可以改变主表的国家名字
update country set id='555' where id=3; -- on update cascade 可以改变主表的国家id
update country set id=6 where id=2; -- 可以改变主表的国家id,使蜀国id变为6,相应地从表的country_id也变为6
delete from country where id=555; -- on delete cascade 删除主表的国家,相应关联的角色也没了
delete from role where role_name='曹操'; -- 删除从表的单个曹操,魏国还在
delete from role where country_id=1; -- 删除country_id=1的角色,也就是所有的魏国人,单是主表的魏国还在
多对多
-- 多对多
drop tables if exists country,role;
create table country(
id int primary key auto_increment,
country_name char(3) not null
);
create table role(
id int primary key auto_increment,
role_name char(5) not null
);
insert into country(country_name) values
('魏国'),
('蜀国'),
('吴国');
insert into role(role_name) values
('曹操'),
('张辽'),
('甄姬'),
('诸葛亮'),
('孙尚香'),
('徐庶'),
('周瑜');
-- drop tables country_role;
-- 单独创建表来联系多对多的关系
CREATE TABLE country_role(
country_id int not null,
role_id int not null,
-- 连接国家id
foreign key(country_id) references country(id)
on delete cascade
on update cascade,
-- 连接角色id
foreign key(role_id) references role(id)
on delete cascade
on update cascade
);
insert into country_role(country_id,role_id) values
(1,1),
(1,2),
(1,3),
(1,6),
(2,4),
(2,5),
(2,6),
(3,5),
(3,7);
desc country;
desc role;
desc country_role;
-- 角色id是1的,把国家id改为2.
update country_role set country_id=2 where role_id=1;
-- 删除country表的魏国,原来的role表的角色都在,但是country_role表的魏国与角色的连接没了
delete from country where id=1;
-- country的id变化,相应地country_role表也跟着改变id,所以就是改变主表的id,原来的联结关系也不变,只是id变了
update country set id=5 where id=2;