SQLite 附加数据库(ATTACH DATABASE)
                           
天天向上
发布: 2025-03-04 08:30:30

原创
492 人浏览过

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 操作,如 SELECTJOININSERT 等。
  • DETACH DATABASE 可用于断开附加数据库。
  • 在 Python 等编程语言中,也可以使用 ATTACH 进行多数据库管理。

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

发表回复 0

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