最近も同様の問題が発生しました。次のクエリを使用して、ATableテーブルのすべてのAColumn値を新しい値(例:2)に更新した後でも
UPDATE ATable SET AColumn = 2;
次の個別のクエリを選択します
SELECT DISTINCT AColumn from ATable;
返された古い値(例:1、2、3、および
SELECT * FROM ATable WHERE AColumn = 1
「データベースディスクイメージが不正な形式のsqliteです」という エラーが発生しました。
ATableにはAColumnにインデックスがあり、そのインデックスを通過するすべてのクエリが間違った結果を返しました。次のプラグマを使用して整合性チェックを実行すると、一部のインデックスが破損していることが証明されました。
PRAGMA integrity_check;
IDX_AColumnには多くの行がありませんでした。また、インデックスに間違った数のエントリが含まれていました。幸いなことに、すべてのテーブルのデータは無傷で、破損したインデックスはごくわずかでした。破損したインデックスのインデックスを再作成すると、問題が解決しました。
REINDEX ATable; http://www.sqlite.org/lang_reindex.html
多くのインデックスが破損している場合は、次のコマンドを使用して、すべてのインデックスを同時に再インデックスできます。
REINDEX;