外键的功能
- 设置外键的作用很明显,就是将两个表的数据产生关联,就比如个人信息表和部门表之间,部门表的部门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"级别的;
其他的情况就不一一介绍了;