mysql 外键操作

在这里插入图片描述

创建外键

新表

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

不做任何操作

猜你喜欢

转载自blog.csdn.net/weixin_45875105/article/details/112649468
今日推荐