我有一个数据库,以某种方式以下列方式被破坏:
表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的副本。
感谢。
答案 0 :(得分:0)
数据库实际上是从2010年开始使用H2版本1.2.140创建的。(数据库文件中的'CREATE_BUILD'设置为140,表示使用版本1.2.140。)
很难说参考完整性是如何被违反的。当数据库损坏时可能会发生此问题,或者在referential integrity was disabled(如果它已被禁用)时可能发生此问题。
recover tool旨在尽可能多地恢复数据库文件中的数据。它不能解决引用完整性问题。
修复参照完整性问题有多种方法。一种解决方案是删除多余的记录,另一种是添加缺失的记录。我目前没有自动修复方法。