删除表时,其他表中存在相关联内容不予删除

前言:

        在处理删除一些表的时候,往往会出现某些条件不通过,不允许删除的情况,这个时候一般会采用不同的方式来解决,例如:用过外键约束,通过索引约束,可以在业务层中去完善这个逻辑,也能通过虚拟表来完成,这次我采用的是通过外键约束

外键:

        简而言之就是一个表中定义的字段名称在另一个表中是为主键,且这两个表有连接关系,那么这个字段名称就是这个表的外键,外键所在的表也叫子表(从表),通过外键相连的那个表叫做父表(主表),例如以下

示例:

年级表(父表、主表):tb_gradeinfo

删除表时,其他表中存在相关联内容不予删除_第1张图片

班级表(子表、从表):tb_classinfo

删除表时,其他表中存在相关联内容不予删除_第2张图片 

 在年级表与班级表建立了连接关系下前提下,班级表中的gradeID就是班级表的外键

sql语法:

PRIMARY KEY (`classID`),          --------------主键
  KEY `gradeID` (`gradeID`),       
  CONSTRAINT `tb_classinfo_ibfk_1` FOREIGN KEY (`gradeID`) REFERENCES `tb_gradeinfo` (`gradeID`)                                   --------------外键

约束条件用 ON,例如:

                约束删除:on delete restrict 、约束修改:ON UPDATE RESTRICT  (MySQL不区分大小写)

restrict:外键定义时指定的关键字

外键定义时指定的关键字:

restrict:

        查找主表中存在的值;子表中存在与主表相对应的值,主表值不允许删除

        可以取空值。

cascade:

        删除主表中相关联的字段名称的值时,从表中相对应的值也会删除

no action:

        子表中存在与父表相对应的值,父表不能进行update和delete操作

set null:

        父表进行update和delete操作时,将子表相对应的值(外键)设置为null(子表外键不能为not null )

default:

        父表有变化时,子表的相对应的值全部(外键列)会设置为默认值

你可能感兴趣的:(数据库)