foreign_key_checks - xiaoboluo768/qianjinliangfang GitHub Wiki

  • 控制是否开启外键约束检查
    • 如果设置为1(默认值),则会检查InnoDB表的外键约束。如果设置为0,外键约束将被忽略,但有一些例外。如:当删除重新创建父表时,如果父表定义不符合引用该表的子表外键约束要求(父表中被子表引用的字段的列数据类型和属性要一致,被子表引用的列必须要有索引等),则返回错误(ERROR 1215 (HY000): Cannot add foreign key constraint)。同样,如果外键定义不正确,则操作将返回错误
    • 从MySQL NDB Cluster 7.3.2开始,此变量对NDB表的影响与InnoDB表具有相同的效果 。通常,如果你的数据表中使用了外键,那么您在正常操作期间使此设置保持启用,以强制引用完整性。但生产环境不建议使用外键约束
    • 在父表与子表中的数据需要重新载入时,需要禁用外键约束,以避免父/子关系所要求的顺序在重新载入时不符合要求而发生错误
    • 全局,会话,动态变量,布尔型,默认值为ON
    • 注意:
      • 将foreign_key_checks设置为1不会触发对现有表数据的扫描。因此,在foreign_key_checks = 0时添加到表中的行将不会验证父子表的数据一致性,且重新设置为1时,只对新插入的数据才进行一致性验证。
      • 使用foreign_key_checks = 0之后,如果删除外键约束所需的索引会使父子表的数据可能处于不一致的状态,且可能会导致在表数据重新加载时发生外键检查失败。为了避免这个问题,此时你需要删除外键约束,然后再删除索引
      • 创建外键约束时,子表的外键字段没有索引会自动创建一个辅助索引,但是,父表在子表创建外键时,一定要有索引,否则报错:ERROR 1215 (HY000): Cannot add foreign key constraint,另外,如果子表创建外键时
      • 创建外键约束时,父表中的记录不能有null值,否则报错:ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (xiaoboluo.#sql-1498_2a, CONSTRAINT #sql-1498_2a_ibfk_1 FOREIGN KEY (id) REFERENCES parent (test))

上一篇:lower_case_table_names | 下一篇:disabled_storage_engines