我有不知何故以下列方式损坏数据库:
表A的记录在一个外键列指向表B的值,但没有这样的纪录B.
的存在数据库是在h2版本1.3.152中创建的,我用1.3.170恢复了它(本文最新)。
奇怪的是,恢复工具没有抱怨这个(但问题没有解决)
任何想法为什么/如何发生这种情况?
任何想法如何恢复?参照完整性破碎
实际例子:
SELECT * FROM PUNTO其中punto_id = 3309; - >不返回任何东西
select * from tramo where caseta_punto_id = 3309; - >返回1记录
punto.punto_id引用tramo.caseta_punto_id
您也可以下载数据库here的副本。
谢谢。
谢谢托马斯花时间回答。对于关于版本的错误信息抱歉。它让我担心db可能会以这种方式默默地结束。在运行时查询开始失败时发现该问题。我无法手动修复该问题(设置为空fk columnd并重新插入缺失的记录),直到我重新启动数据库。某事正在锁定这件事。 – pakman
它也让我感到担忧......不幸的是,我不能说出是什么原因导致了参照完整性被破坏。这可能是参考完整性被手动禁用,我想你没有那样做?过去,在版本1.2.140和现在之间,存储引擎级别上存在一些可能导致索引损坏的错误(有关详细信息,请参阅更改日志)。不是很多,而且现在已经修好了,但这可能是原因。我目前正在研究一种新的,更简单的存储引擎。这应该可以降低存储引擎级错误的风险。 –