【问题标题】:Check for referential integrity break检查参照完整性中断
【发布时间】:2010-09-16 14:55:02
【问题描述】:

在我的过程中,我做了类似的事情:

SET FOREIGN_KEY_CHECKS = 0;
LOAD DATA INFILE '/path/to/mytable.txt' INTO TABLE mytable;
SET FOREIGN_KEY_CHECKS = 1;

现在,我需要检查此导入后的数据是否没有破坏参照完整性。我想做类似的事情

check database all foreign_keys;

是否存在类似的命令?如果没有,如何控制?

环境:带有 InnoDB 的 MySQL v5.1.xx

谢谢

【问题讨论】:

    标签: mysql referential-integrity


    【解决方案1】:

    回答

    Here 是一些可以满足您需求的代码。好像没有这个命令。

    历史

    好的,我不是 MySQL 专家,但除非您禁用它,否则会持续管理引用完整性。除非您首先删除或禁用了约束,否则您不能将行插入到违反约束的表中。没有必要“检查”它们。

    如果您确实“禁用”了它们,那么启用它们将强制进行检查。

    这实际上是完全错误的,而且确实非常可怕。 at least in 5.1

    我认为如果他们有那个功能,他们只会在你重新启用约束时调用它,所以我怀疑你会在服务器中找到它。

    【讨论】:

    • 命令:SET FOREIGN_KEY_CHECKS = 0;全局禁用所有参照完整性检查。这允许在不考虑表导入顺序的情况下导入一堆数据。命令:SET FOREIGN_KEY_CHECKS = 1;全局启用所有参照完整性检查。但如文档中所述,(现在找不到页面)这不会强制检查现有数据...
    • 哇。那是一些可怕的东西!您有一个看起来是声明性的但不能依赖的约束。在证明并非如此之前,我真的会怀疑这一点。
    • 谢谢,脚本正是我需要的:)
    【解决方案2】:

    上面的链接已经失效了,很遗憾。

    这篇博文中提到的脚本很好地显示了未引用的 FK(尽管它也会在 FK 可以为空时显示它们,因此可能是合法的 null,因此并不总是有帮助!):

    http://www.mysqlperformanceblog.com/2011/11/18/eventual-consistency-in-mysql/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 2016-03-13
      • 2010-09-26
      相关资源
      最近更新 更多