SQLite删除数据占用空间不变的解决方法

这几天使用SQLite发现个问题,原空数据库只有10K,往数据库写1M的数据,写完数据之后,数据库房有将近1034K左右,这时再将数据清空,发现数据库的大小依然没变,还是1034,我就奇了怪了,朋友告诉我应该是VACUUM的原因,网上了查了下,网上的解释如下:


     当你从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。


找到原因就得知,在建表之前需要设置VACUUM,VACUUM的默认值是0,可以建表之后查询VACUUM的值,查询命令,PRAGMA auto_vacuum,VACUUM在建表之后是不能修改的,所以必须得在建表之前设置它的值,执行命令PRAGMA auto_vacuum = 1;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: SQLite是一种轻量级的数据库管理系统,它提供了删除和恢复数据方法。 在SQLite中,可以通过执行DELETE语句来删除数据。DELETE语句使用WHERE子句来指定要删除数据行。例如,可以使用以下语句删除名为"students"的中学号为101的学生记录: ``` DELETE FROM students WHERE 学号 = 101; ``` 执行该语句后,学号为101的学生记录将被从删除。 如果在删除数据之前需要备份数据或者希望在删除之后进行撤销操作,可以使用事务。SQLite支持事务的回滚操作,可以通过BEGIN、ROLLBACK和COMMIT语句来控制事务的开始、回滚和提交。 如果希望恢复已经删除数据,可以使用备份文件进行恢复。SQLite数据库可以通过将其文件复制到其他位置来进行备份。在需要恢复数据时,只需将备份文件复制回原位置即可恢复数据。 另外,SQLite还提供了其他一些备份和恢复数据方法。可以使用导出和导入工具,如SQLite的命令行工具或可视化工具,将数据导出到文件中,并在需要时将数据重新导入到数据库中。 总结起来,SQLite提供了删除和恢复数据的方式。删除数据可以使用DELETE语句,而恢复数据可以通过备份文件或使用导入工具来实现。 ### 回答2: 在SQLite中,我们可以使用DELETE语句来删除数据删除数据的过程是永久性的,一旦删除之后无法直接恢复。因此,在进行数据删除操作之前,请务必进行备份以防止意外删除。 如果您在进行数据删除后发现需要恢复数据,有几种途径可以尝试恢复数据: 1. 从备份中还原:如果您之前已经进行了数据备份,可以通过将备份的数据还原到数据库中来恢复被删除数据。这需要您在删除数据之前,定期创建并保存数据库备份文件。 2. 通过日志回滚:SQLite具有事务日志功能,可以记录在事务中进行的所有更改操作,包括数据删除。通过使用事务日志进行回滚操作,可以恢复到删除操作之前的数据状态。但是这种方法只适用于在进行删除操作之前,事务日志已经完整记录了该删除操作。 要使用日志回滚恢复数据,可以执行以下步骤: - 打开数据库连接,并将其设置为WAL模式(Write-Ahead Logging)。 - 执行ROLLBACK命令,回滚到适当的事务状态。 - 关闭数据库连接并重新打开。 需要注意的是,这种方法只适用于在删除操作之前,事务日志已经完整记录了该删除操作。如果删除操作发生在未记录事务日志的情况下,这个方法将无法恢复数据。 总而言之,SQLite数据删除是一个永久性的操作,一旦删除无法直接恢复。因此,在进行删除操作之前,请确保进行了数据备份,并在可能的情况下使用事务日志来进行回滚操作以恢复数据
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值