sqlite数据库删除了数据,为什么文件不会变小?

发布时间 2023-11-28 14:20:52作者: 子不语2015831

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()