创建外键
新表
foreign key(参考字段名)
references 主表(被参考字段名)
on delete 级联动作
on update 级联动作
例子
'创建主表 '
create table master(
id int primary key,
name varchar(20),
class char(7),
money decimal(6, 2)
)charset=utf8;
'创建外键表'
create table slave(
stu_id int,
name varchar(20),
money decimal(6,2),
foreign key(stu_id) '外键 字段'
references master(id) '外键 被参考字段'
on delete cascade '删除 级联操作'
on update cascade '修改 级联操作'
)charset=utf8;
insert into master values(1, "唐伯虎", "AID1903", 300),
(2, "点秋香", "AID1903", 300),
(3, "祝枝山", "AID1903", 300);
insert into slave values(1, '唐伯虎', 300),(2, '点秋香',300),(3,'祝枝山', 300);
'插入非法数据 总表不存在的ID'
insert into slave values(8, "王总", 300);
已有表
alter table 表名 add foreign key(参考字段)
references 主表(被参考字段)
on delete 级联动作
on update 级联动作
例子
alter table slave add foreign key(stu_id)
references master(id)
on delete cascade
on update cascade;
删除外键
alter table 表名 drop foreign key 外键名;
例子
'查看外键名称'
show create table slave_2;
'删除外键'
alter table slave_2 drop foreign key
slave_2_ibfk_1; '需要查询外键名称'
级联操作
cascade
on delete cascade
on update cascade
create table slave(
stu_id int,
name varchar(20),
money decimal(6,2),
foreign key(stu_id) references master(id)
on delete cascade '删除 跟随变化'
on update cascade '更新 跟随变化'
)charset=utf8;
'删除 跟随变化'
delete from master where id = 1;
'更新 跟随变化'
update master set id=10 where id=2;
restrict
不执行级联操作 需要先删除 才可以
从表有相关联记录,不允许主表操作
on delete restrict ‘不执行级联操作’
on update restrict ‘不执行级联操作’
create table slave_2(
stu_id int,
name varchar(20),
money decimal(6,2),
foreign key(stu_id) references master(id)
on delete restrict '不执行级联操作'
on update restrict '不执行级联操作'
)charset=utf8;
'执行报错 不允许级联删除'
delete from master where id=10;
set null
设置空值
create table slave_3(
stu_id int,
name varchar(20),
foreign key(stu_id) references master(id)
on delete set null '设置空值'
on update set null '设置空值'
)charset=utf8;
insert into slave_3 values(10, "点秋香");
'先删除 表2的干扰'
delete from slave_3 where stu_id=10;
'可以删除主表'
delete from master where id = 10;
no action
不做任何操作