C++ 和 Sqlite DELETE 查询实际上并没有从数据库文件中删除值

标签 c++ database sqlite sql-delete

我在 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/

相关文章:

C++ - 在 map 中搜索具有相同值的所有键的最快方法是什么?

c++ - CV_8UC3 和其他类型在 OpenCV 中代表什么?

c++ - 为什么不能取nullptr的地址?

c++ - Thrift - 每个套接字都有不同的 Handler 实例

python - Pandas :创建一个在两列之间交替的新列

php - PHP、MYSQL如何显示动态生成的数字

Android SQLite更新语句

php - 跨 session 的用户特定内容建议 [MySQL/Web]

mysql - 为新的 webapp 水平或垂直扩展数据库表? (MySQL/SQLite)

c++ - 使用 QT 和 SQLite 通过单元格编辑更新数据库