SQLite - 分离数据库
SQLite - DETACH DATABASE
Section titled “SQLite - DETACH DATABASE”DETACH DATABASE 命令用于将先前附加(attached)的数据库从当前数据库连接中分离(disconnect)。每个附加的数据库都通过一个别名(alias)标识,DETACH 命令使用此别名来指定要分离的数据库。
你不能分离默认的 main 或 temp 数据库。如果一个数据库文件使用多个别名附加,分离其中一个别名不会影响其他别名。如果被分离的数据库是内存数据库,它将被销毁,其数据将永久丢失。
该语法需要 ATTACH DATABASE 语句中使用的别名。
DETACH DATABASE 'Alias-Name';让我们来看一个完整的附加和分离周期。首先,我们将创建两个独立的数据库文件。
-- 在你的终端中:$ sqlite3 main.db "CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1);"$ sqlite3 reporting.db "CREATE TABLE reports (report_id INT); INSERT INTO reports VALUES (101);"现在,让我们用 main.db 开始一个会话,并查看其过程。
$ sqlite3 main.db
-- 步骤 1:检查初始数据库连接sqlite> .databasesseq name file--- --------------- --------------------------0 main /path/to/main.db
-- 步骤 2:使用别名 'reports_db' 附加 reporting 数据库sqlite> ATTACH DATABASE 'reporting.db' AS reports_db;
-- 步骤 3:验证数据库是否已附加sqlite> .databasesseq name file--- --------------- --------------------------0 main /path/to/main.db2 reports_db /path/to/reporting.db
-- 现在你可以跨数据库查询sqlite> SELECT * FROM main.t1, reports_db.reports;id report_id-- ---------1 101
-- 步骤 4:分离 reporting 数据库sqlite> DETACH DATABASE 'reports_db';
-- 步骤 5:检查最终状态。连接已断开。sqlite> .databasesseq name file--- --------------- --------------------------0 main /path/to/main.db
-- 现在尝试查询已分离的数据库将导致错误sqlite> SELECT * FROM reports_db.reports;Error: no such table: reports_db.reports