Mysql取消外键索引约束

概念

外键是相对主键而来的。

  • 主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

  • 外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键表示一个表中的一个字段被另一个表中的一个字段引用。外键对相关表中的数据造成了限制,使MySQL能够保持参照完整性。

外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。

定义外键时,需要遵守下列规则

  • txt主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

  • txt 必须为主表定义主键。

  • txt 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

  • txt 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

  • txt 外键中列的数目必须和主表的主键中列的数目相同。

  • txt 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

实战

现在项目中外键约束用的相对较少,一般都用冗余id来解决表关联的问题,不再进行强约束了,但是有一些框架对应的数据结构依然在用,比如最近在用工作流flowable,它包含的表就大量使用到了外键,导致我删除数据很麻烦,那临时的解决方案就是先全局的取消外键约束,然后删除数据后再启用。

  • 查看外键约束,1表示已经启用,0表示未启用:
    java SELECT @@FOREIGN_KEY_CHECKS;

  • 取消外键约束:
    java SET FOREIGN_KEY_CHECKS = 0;

  • 启动外键约束:
    java SET FOREIGN_KEY_CHECKS = 1;

猜你喜欢

转载自blog.csdn.net/u010786653/article/details/124979983