附加数据库

、概述

附加stmt:

ATTACH DATABASE expr AS schema-name

表达式:

ATTACH DATABASE 语句将另一个数据库文件添加到当前数据库连接可以使用DETACH DATABASE命令 删除以前附加的数据库文件。

2.细节

要附加的数据库的文件名是出现在 AS 关键字之前的表达式的值。数据库的文件名遵循与sqlite3_open()sqlite3_open_v2()的文件名参数相同的语义特殊名称“ :memory: ”产生内存数据库,空字符串产生新的临时数据库。如果在数据库连接上启用了 URI 文件名处理,则文件名参数可以是URI 文件名。默认行为是禁用 URI 文件名,但是这可能会在 SQLite 的未来版本中发生变化,因此建议应用程序开发人员进行相应的计划。

出现在 AS 关键字之后的名称是 SQLite 内部使用的数据库的名称。模式名称“main”和“temp”指的是主数据库和用于临时表的数据库。不能附加或分离主数据库和临时数据库。

可以使用语法 schema-name.table-name引用附加数据库中的表。如果表的名称在所有附加数据库以及主数据库和临时数据库中是唯一的,则 不需要模式名称前缀。如果不同数据库中的两个或多个表具有相同的名称,并且 表引用未使用模式名称前缀,则所选表是数据库中最近最少附加的表。

假设主数据库不是“ :memory: ”并且 journal_mode不是WAL ,涉及多个附加数据库的事务是原子的。如果主数据库是“:memory:”或者如果 journal_mode 是 WAL,那么事务在每个单独的数据库文件中继续是原子的。但是,如果主机在更新两个或多个数据库文件的COMMIT中间崩溃,那么其中一些文件可能会得到更改,而其他文件可能不会。

有一个限制,使用sqlite3_limit()SQLITE_LIMIT_ATTACHED设置,可以同时附加到单个数据库连接的数据库数量。