SQLite 分离数据库(DETACH DATABASE)
                           
天天向上
发布: 2025-03-04 08:31:15

原创
649 人浏览过

在 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 可能会报错,需要先 COMMITROLLBACK 事务后再 DETACH

5. 总结

  • DETACH DATABASE 用于从当前会话中移除附加数据库。
  • 只能分离 ATTACH DATABASE 附加的数据库,main 数据库不能被分离。
  • PRAGMA database_list; 可用于检查当前连接的数据库。
  • 在 Python 等编程语言中,也可以使用 DETACH DATABASE 进行数据库管理。

更多详细内容请关注其他相关文章。

发表回复 0

Your email address will not be published. Required fields are marked *