我在 SQlite 和 c++ 上遇到了这个问题,但找不到任何答案。
在 SQlite 和 C++ 中一切正常,所有查询都输出所有函数,但我有这个问题,无法找到任何解决方案。
我创建一个数据库MyTest.db 我创建一个表测试,其中包含 id 和名称作为字段 我为每个 id=1 name=Name1 和 id=2 name=Name2 输入 2 个值 我删除第二个值
表中的数据现在表明我只有 id=1 且 name=Name1
当我用 notepad.exe 打开 Mytest.db 时,我删除的值(例如 id=2 name=Name2)仍然在数据库文件中,尽管它没有出现在该表的数据结果中,但仍然存在但确实存在。
我想向任何了解此事的人询问以下问题: 有没有其他方法可以从数据库文件中删除该值,或者是我对 SQLITE 的 DELETE 选项的错误(我对此表示怀疑)
这就像数据库文件不断收集其中的所有垃圾,而不从其表中删除已删除的值...
非常感谢任何帮助或建议
最佳答案
如果您使用“PRAGMA secure_delete=ON;”然后 SQLite 用零覆盖删除的内容。请参阅https://www.sqlite.org/pragma.html#pragma_secure_delete
即使 secure_delete=OFF,删除的空间也将在下次 INSERT 时重新使用(并覆盖)来存储新内容。 SQLite 不会泄漏磁盘空间,也不需要 VACUUM 来回收空间。但通常情况下,删除的内容不会被覆盖,因为这会使用额外的 CPU 周期和磁盘 I/O。
关于C++ 和 Sqlite DELETE 查询实际上并没有从数据库文件中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35606496/