2017-03-02 33 views
1

我從SQLite數據庫表中刪除數據。如果您在任何SQL管理器(例如SQLiteStudio)中打開數據庫文件,則刪除的數據不存在,但如果您在文本編輯器(例如記事本++)中打開數據庫文件,則刪除的數據是可見的。因此有恢復數據的機會,等等SQLite刪除的數據保留在數據庫二進制文件

實施例:

在第一張照片SQLiteStudio是表示刪除客戶「斯坦」是沒有看到。但在Notepad ++中打開的二進制文件顯示客戶「Stan」。

有沒有人知道如何讓刪除的數據從SQLite二進制文件中消失?

SQLiteStudio showing that deleted customer "Stan" is not seen

Binary file open in Notepad++ shows customer "Stan"

回答

2

這是大多數數據庫一種正常的行爲。 SQLite不是一個例外。大多數時候,設計師更喜歡速度與分散。

要使數據完全從您的文件中消失,您需要vacuum您的數據庫。

您可以使用pragma auto_vacuum=FULL選項構建數據庫,以使數據庫本身真空。

1

爲了防止這種情況,執行PRAGMA secure_delete = ON

當secure_delete是,SQLite的覆蓋刪除內容的零。 secure_delete的默認設置由SQLITE_SECURE_DELETE編譯時選項決定,通常關閉。 secure_delete的off設置通過減少磁盤I/O的數量來提高性能。希望在內容刪除或更新後避免留下取證痕跡的應用程序應在執行刪除或更新之前啓用secure_delete編譯指示,否則在刪除或更新後運行VACUUM

+0

正是我在找的東西! – stanislavr