Skip to content

SQLite - 附加数据库

ATTACH DATABASE 语句允许您在单个数据库连接中处理多个数据库文件。这对于数据迁移、跨不同数据集查询或访问归档等任务非常有用。

该语法要求您提供数据库文件的路径以及一个用于引用该文件的别名(alias)。

ATTACH DATABASE 'path/to/database.db' AS AliasName;

执行此命令后,您可以通过在表名前加上别名来访问附加数据库中的表(例如,AliasName.table_name)。原始数据库通过别名 main 来引用。

想象一下,您有一个用于本年度销售的 current_sales.db 数据库,以及一个用于所有往年销售的 archive_sales.db 数据库。您希望查询某个特定产品在两个数据库中的总销售额。

首先,连接到您的主数据库:

$ sqlite3 current_sales.db

接下来,附加归档数据库:

sqlite> ATTACH DATABASE 'archive_sales.db' AS archive;

您可以使用 .databases 命令验证附加的数据库。

sqlite> .databases
seq name file
--- --------- -----------------------
0 main /path/to/current_sales.db
2 archive /path/to/archive_sales.db

现在您可以运行一个组合两个数据库数据的查询。假设两个数据库都有一个包含 product_id 和 amount 列的 sales 表:

sqlite> SELECT SUM(total) FROM (
...> SELECT SUM(amount) AS total FROM main.sales WHERE product_id = 123
...> UNION ALL
...> SELECT SUM(amount) AS total FROM archive.sales WHERE product_id = 123
...> );

完成后,您可以使用其别名分离数据库。

sqlite> DETACH DATABASE archive;

数据库名称 main 和 temp 是保留的。main 指的是您连接的主数据库,temp 用于临时表。您不能使用这些别名附加数据库。

sqlite> ATTACH DATABASE 'test.db' AS main;
Error: database main is already in use