mysql 外键命名_mysql--外键(froeign key)

如果一个实体的某个字段指向另一个实体的主键,就称为外键

被指向的实体,称之为主实体(主表),也叫父实体(父表)。

负责指向的实体,称之为从实体(从表),也叫子实体(子表)

2423c7b784d0f6c46b9833d5188c15db.png

作用:

用于约束处于关系内的实体

增加子表记录时,是否有与之对应的父表记录

如果主表没有相关的记录,从表不能插入

f077b1705a6d6fed388faac279b2a9f9.png

先插入主表数据后再插入从表数据:

2d15d498a2cbd7263ed4f7c25dff9b31.png

在删除或者更新主表记录时,从表应该如何处理相关的记录

设置级联操作:

在主表数据发生改变时,与之关联的从表数据应该如何处理

使用关键字:

on update

on delete

来标识

允许的级联动作:

cascade关联操作,如果主表被更新或删除,从表也会执行相应的操作

set null,表示从表数据不指向主表任何记录

restrict:拒绝主表的相关操作

alter table t_student add foreign key (class_id) references t_class (class_id)

on delete set null; # 在删除外键时,将从表的外键值设置为null

修改外键:

先删除这个表的外键,然后再增加

alter table tb_name drop froeign key 外键名称

外键名称在建立外键时可以自定义名称,如果不自定义,会按照mysql自动生成一个名称

show create table tb_name;

ad13a19b299d12b014d0ab95b8a82a6d.png

alter table t_student drop foreign key t_student_ibfk_1;

8bed092e1a6a1d4f807023a2243b6c10.png

删除外键后不会对表中的数据造成任何影响,改变的只是对表的一种约束

alter table t_student add foreign key (class_id) references t_class (class_id)

on delete set null; # 在删除外键时,将从表的外键值设置为null

1884ae14b69fc5a9a4a85e4b641775d1.png

8ac4711cfd74063c4d99192df8453612.png

注:on delete 与on update 可以同时出现,

但在on delete 或on update 后不能同时出现cascade、set null、restrict,只能有一个

关于restrict的外键约束此处没有写,与其他两个一样

restrict:拒绝主表的相关操作,在主表更新或者删除数据时,在从表中存在与主表主键相关的数据,则不允许对主表数据进行更新或者删除

在不设置任何级联关系约束时,主表默认会是restrict

19355b9407a4ef9afe0b7b90762331f3.png

在restrict约束下,如果想要删除主表数据,除了可以删除没有与子表数据相关的数据外,

可以先修改子表中的外键(修改时,外键必须也要关联到主表的主键,否则不能修改成功)

394dca22c64d73b1af910dc0d664beba.png

也可以先删除与想要删除的主表数据的子表数据,再去删除此条主表数据

eabf54448cc3f7470e2d24d33a73ad31.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值