参照完整性破裂

时间:2012-12-07 22:17:31

标签: foreign-keys h2 corrupt referential-integrity

我有一个数据库,以某种方式以下列方式被破坏:
表A中的记录在指向表B的外键列中具有值,但是在B.中不存在这样的记录 数据库是在h2版本1.3.152中创建的,我用1.3.170恢复了它(在本帖子的最新时刻)。
同样奇怪的是恢复工具没有抱怨这个(但问题没有解决) 关于为什么/如何发生的任何想法?
有关如何恢复的任何想法?

实际例子:

从punto中选择* punto_id = 3309; - >没有返回任何东西

从tramo中选择*,其中caseta_punto_id = 3309; - >返回1条记录

punto.punto_id引用tramo.caseta_punto_id

您可以下载数据库here的副本。

感谢。

1 个答案:

答案 0 :(得分:0)

数据库实际上是从2010年开始使用H2版本1.2.140创建的。(数据库文件中的'CREATE_BUILD'设置为140,表示使用版本1.2.140。)

很难说参考完整性是如何被违反的。当数据库损坏时可能会发生此问题,或者在referential integrity was disabled(如果它已被禁用)时可能发生此问题。

recover tool旨在尽可能多地恢复数据库文件中的数据。它不能解决引用完整性问题。

修复参照完整性问题有多种方法。一种解决方案是删除多余的记录,另一种是添加缺失的记录。我目前没有自动修复方法。