sqlite数据库删除了数据,为什么文件不会变小?
SQLite数据库文件的大小不会自动缩小,即使删除了其中的数据。
这是因为在SQLite中,当数据被删除时,它实际上并没有立即从磁盘上移除,而是被标记为【已删除】,
这种处理机制,被删除的数据仍然占用的空间,
标记【已删除】的作用是以后可以被新插入的数据重用。
如果想减小SQLite数据库文件的大小,你可以使用 VACUUM 命令。
VACUUM 命令会重建数据库文件,使得未使用的空间被回收,并且可以压缩数据库文件。
但是请注意,VACUUM操作可能会花费一些时间,特别是对于大型数据库。
以下是如何在SQLite中使用VACUUM命令的示例:
sql
Copy code
VACUUM;
这将会对当前连接的数据库进行VACUUM操作。
在python中操作:
import sqlite3
# 连接到你的数据库
conn = sqlite3.connect('your_database.db')
# 创建一个游标对象
cur = conn.cursor()
# 执行VACUUM命令
cur.execute('VACUUM')
# 提交事务
conn.commit()
# 关闭连接
conn.close()
如果你想要对特定的数据库进行VACUUM操作,你可以这样做:
sql
Copy code
ATTACH DATABASE 'your_database.db' AS db_name; VACUUM db_name; DETACH DATABASE db_name;
这将会附加指定的数据库,对其进行VACUUM操作,然后断开连接。
在python中操作:
import sqlite3
# 连接到你的数据库
conn = sqlite3.connect(':memory:') # 使用内存中的数据库作为例子
# 创建一个游标对象
cur = conn.cursor()
# 执行ATTACH DATABASE命令
cur.execute('ATTACH DATABASE "your_database.db" AS db_name')
# 执行VACUUM命令
cur.execute('VACUUM db_name')
# 执行DETACH DATABASE命令
cur.execute('DETACH DATABASE db_name')
# 提交事务
conn.commit()
# 关闭连接
conn.close()
sqlite数据库删除了数据,为什么文件不会变小?的更多相关文章
- android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
android 一个SQLite数据库多个数据表(带demo) 前言 demo演示 一.搭建 二.建立实体类 三.建立数据库操作类 ...
- Android 学习笔记之如何使用SQLite数据库来保存数据...
PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼... 学习内容: 1.使用SQLite数据库来保存数据... SQLite: ...
- Android调用Sqlite数据库时自动生成db-journal文件的原因
数据库为了更好实现数据的安全性,一半都会有一个Log文件方便数据库出现意外时进行恢复操作等.Sqlite虽然是一个单文件数据库,但麻雀虽小五脏俱全,它也会有相应的安全机制存在 这个journal文件便 ...
- 【转】Android调用Sqlite数据库时自动生成db-journal文件的原因
数据库为了更好实现数据的安全性,一半都会有一个Log文件方便数据库出现意外时进行恢复操作等.Sqlite虽然是一个单文件数据库,但麻雀虽小五脏俱全,它也会有相应的安全机制存在 这个journal文件便 ...
- SQLite Expert 删除表数据并重置自动增长列
用下面的语句肯定是行不通的,语句不支持 truncate table t_Records 方法:1.删除表数据 2.重置自动增长列 where name='t_Records' /*name :是表名 ...
- [置顶]
flume高并发优化——(14)解决空行停止收集数据问题,及offsets变小问题
日志平台运行一段时间,发现日志有部分丢失,通过检查日志,发现有两个问题导致数据丢失,一个是遇到空行后,日志停止收集,还有就是kafka监控offsets时变小,通过分析代码,找到如下方法: 空行问 ...
- 恢复MySQL数据库删除的数据
在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失!然而是人总难免会犯错误,说不定哪天大脑短路了,误操作把数据库给删除了,怎么办? 下面 ...
- Android 开发笔记 “Sqlite数据库删除”
1.代码方式 Context.deleteDatabase(String databaseName);//删除某一数据库 2.设置里面 进入应用程序 ,然后清除数据就ok了
- Mysql数据库删除重复数据
最近因为发现数据库中的表有脏数据,需要维护.这些脏数据就是重复数据,需要将其删除. 现假设有一张test表,主键字段为num,还有id,one,two三个字段.假设id规定只能有一条记录(即需要为id ...
- iOS-防止向SQLite数据库中插入重复数据记录:
原则:先检测该数据库的指定表中,是否已经存在我们要插入的这条数据记录,若已经存在,则不插入这条数据记录(即忽略此次插入操作),若尚不存在,才插入这条数据记录(即才执行此次插入操作) 我们这里使用的是F ...
随机推荐
- 利用文件包含漏洞包含ssh日志拿shell
今天看文章学了一招,有包含漏洞无法传文件的时候用 目标服务器环境为ubuntu,ssh登录日志文件是/var/log/auth.log 找个Linux的环境执行ssh '<? phpinfo() ...
- RedHat8静默安装was
前言 was(websphere application server),类似weblogic.tomcat,由IBM开发的一种企业级Java容器. 系统版本:redhat 8.2 was版本:was ...
- 【pandas小技巧】--字符串转数值
字符串转数字的用途和场景很多,其中主要包括以下几个方面: 数据清洗:在进行数据处理时,经常会遇到一些数据类型不匹配的问题,比如某些列中的字符串类型被误认为是数字类型,此时需要将这些字符串类型转换为数字 ...
- UI获取元素的几种方式
通过浏览器驱动获取页面元素的8种方式. 定位方法: 通过webdriver对象的find_element方法 通过 id获取元素 el = driver.find_element(By.ID,'id' ...
- Go面经 | 成都Go面试这么卷?卷王介绍:游戏行业 3年经验 20k+
Go最新面经分享:算法.并发模型.缓存落盘.etcd.actor模型.epoll等等... 本文先分享2段面经,文末总结了关键问题的复盘笔记.一定要看到最后! 求职者情况 分享一下好友的最新面经. 简 ...
- Flutter系列文章-Flutter UI进阶
在本篇文章中,我们将深入学习 Flutter UI 的进阶技巧,涵盖了布局原理.动画实现.自定义绘图和效果.以及 Material 和 Cupertino 组件库的使用.通过实例演示,你将更加了解如何 ...
- 小白整理了VUEX
在小白开发的项目中前端使用的是Vue,虽然在日常工作中可以使用Vue进行开发工作.但是没有系统的学习过Vue,对Vue的一些特性和方法使用时常常需要查询资料解决问题,查询资料常常会占用大量时间,尤其对 ...
- 原来你是这样的JAVA[06]-反射
1.JVM为每个加载的class及interface创建了对应的Class实例来保存class及interface的所有信息: 获取一个class对应的Class实例后,就可以获取该class的所有信 ...
- [面向对象] 魔术方法 (__set, __get, __unset, __isset)
__set, __get,__isset, __unset 是面向对象里用来友操作的魔术方法. 先看看使用方法 echo $类->属性; //取不存在属性或私有保护属性时, 以下方法被调用 ...
- 探索计算机的I/O控制方式:了解DMA控制器的作用与优势
I/O控制方式 在前面我们已经了解到,每个设备都配备了一个设备控制器.当CPU向设备控制器发送命令并将其存储在寄存器中时,设备控制器会执行相应的操作.然而,尽管设备控制器会更新状态寄存器的状态,但是如 ...