首页 > 技术文章 > 外键约束:CASCADE、NO ACTION、RESTRICT、SET NULL

90s-ITBoy 2020-04-27 17:03 原文

外键的功能

  • 设置外键的作用很明显,就是将两个表的数据产生关联,就比如个人信息表和部门表之间,部门表的部门id就可以作为一个外键存放于个人信息表中(特性什么的就不再赘述~),除此之外设定外键在父子表中的维护关系,可以达到一个类似于级联的操作,就是当父级表(主键作为外键的表)数据变化时,子表(拿着别的表的主键作为自己的外键的表)就会有相应的数据变化;

外键的约束(外键的限制、外键对父子表数据的维护关系)

  • CASCADE、NO ACTION、RESTRICT、SET NULL这几项可以理解为是:外键对父子表之间数据关系维护(限制)级别;

      |-- 父表:被拿主键作为外键的表;
      |-- 子表:拿别的表的主键作为外键的表;
    
级别 关系维护
CASCADE 父表delete、update的时候,子表会delete、update掉关联记录;
NO ACTION 如果子表中有匹配的记录,则不允许对父表中的那个键进行update/delete操作
RESTRICT 如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许delete记录;
SET NULL 在父表上update/delete记录时,将子表上匹配记录的列设为null要注意子表的外键列不能为not null
SET DEFAULT(Navicat中的空白项) 父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别

关于这四种维护关系的选择需要根据情况而定,比如:

  • 订单表和人员表,当用户注户后,该用户的订单信息需要被清空(至少在当前正在使用的数据库中需要被移出),那么订单表中的外键-人员id,他的维护关系就需要定为"CASCADE"级别的;

其他的情况就不一一介绍了;

推荐阅读