SQLite 附加数据库(ATTACH DATABASE)
SQLite 允许在同一个连接中同时操作多个数据库,这就是 附加数据库(ATTACH DATABASE) 的作用。你可以在 SQL 语句中使用多个数据库,并且可以在它们之间执行 JOIN 查询 或 数据复制。
1. 附加数据库
语法
ATTACH DATABASE 'database_file' AS alias_name;
'database_file':要附加的数据库文件路径。alias_name:该数据库的别名,用于在查询中引用。
示例
假设有两个 SQLite 数据库:
main.db(主数据库)extra.db(需要附加的数据库)
你可以执行:
ATTACH DATABASE 'extra.db' AS extra;
这将在当前会话中将 extra.db 附加为 extra。
2. 查看附加的数据库
要检查当前连接的所有数据库,可以运行:
PRAGMA database_list;
示例输出:
seq name file
0 main /path/to/main.db
1 extra /path/to/extra.db
这里的 main 是默认数据库,extra 是附加的数据库。
3. 在多个数据库之间操作
创建表
CREATE TABLE extra.users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
这里的 extra.users 指定 users 表创建在 extra.db 中,而不是 main.db。
插入数据
INSERT INTO extra.users (id, name) VALUES (1, 'Alice');
跨数据库查询
你可以在不同数据库的表之间进行 JOIN 查询:
SELECT m.id, m.name, e.age
FROM main.customers AS m
JOIN extra.user_info AS e ON m.id = e.user_id;
4. 分离(DETACH)数据库
如果不再需要附加的数据库,可以使用:
DETACH DATABASE extra;
这样,extra.db 将不再出现在当前 SQLite 会话中。
5. Python 中使用附加数据库
如果你在 Python 代码中使用 SQLite,可以这样附加数据库:
import sqlite3
# 连接到主数据库
conn = sqlite3.connect('main.db')
cursor = conn.cursor()
# 附加 extra.db
cursor.execute("ATTACH DATABASE 'extra.db' AS extra;")
# 查询附加数据库中的表
cursor.execute("SELECT name FROM extra.sqlite_master WHERE type='table';")
tables = cursor.fetchall()
print("extra.db 中的表:", tables)
# 分离数据库
cursor.execute("DETACH DATABASE extra;")
# 关闭连接
conn.close()
总结
ATTACH DATABASE允许在同一会话中操作多个 SQLite 数据库。PRAGMA database_list;可以查看当前连接的数据库。- 你可以跨数据库执行 SQL 操作,如
SELECT、JOIN、INSERT等。 DETACH DATABASE可用于断开附加数据库。- 在 Python 等编程语言中,也可以使用
ATTACH进行多数据库管理。
更多详细内容请关注其他相关文章。