SQLite 分离数据库(DETACH DATABASE)
在 SQLite 中,分离数据库(DETACH DATABASE) 用于移除使用
ATTACH DATABASE命令附加的数据库。分离后,该数据库在当前会话中不再可用,但数据库文件仍然保留。
1. 语法
DETACH DATABASE database_alias;
database_alias:要分离的数据库的别名(即ATTACH DATABASE语句中指定的别名)。
2. 示例
(1) 附加数据库
首先,附加一个数据库:
ATTACH DATABASE 'extra.db' AS extra;
(2) 确认数据库是否附加
PRAGMA database_list;
示例输出:
seq name file
0 main /path/to/main.db
1 extra /path/to/extra.db
extra 数据库已附加。
(3) 分离数据库
DETACH DATABASE extra;
(4) 确认数据库已分离
再次运行:
PRAGMA database_list;
输出:
seq name file
0 main /path/to/main.db
extra 数据库已被成功分离。
3. Python 代码示例
在 Python 代码中执行 DETACH DATABASE:
import sqlite3
# 连接到 SQLite 主数据库
conn = sqlite3.connect('main.db')
cursor = conn.cursor()
# 附加 extra.db
cursor.execute("ATTACH DATABASE 'extra.db' AS extra;")
# 查询数据库列表
cursor.execute("PRAGMA database_list;")
print("附加数据库前:", cursor.fetchall())
# 分离 extra.db
cursor.execute("DETACH DATABASE extra;")
# 再次查询数据库列表
cursor.execute("PRAGMA database_list;")
print("分离数据库后:", cursor.fetchall())
# 关闭连接
conn.close()
4. 关键注意事项
DETACH DATABASE只在当前连接中生效,分离后如果重新连接 SQLite,仍然可以ATTACH该数据库。- 无法分离
main数据库,因为它是 SQLite 的默认数据库。 - 如果有未提交的事务,SQLite 可能会报错,需要先
COMMIT或ROLLBACK事务后再DETACH。
5. 总结
DETACH DATABASE用于从当前会话中移除附加数据库。- 只能分离
ATTACH DATABASE附加的数据库,main数据库不能被分离。 PRAGMA database_list;可用于检查当前连接的数据库。- 在 Python 等编程语言中,也可以使用
DETACH DATABASE进行数据库管理。
更多详细内容请关注其他相关文章。