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

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号