ATTACH DATABASE
SQL As Understood By SQLite
[Top]
ATTACH DATABASE
attach-stmt:
hide
expr:
show
literal-value:
show
raise-function:
show
select-stmt:
show
common-table-expression:
show
compound-operator:
show
join-clause:
show
join-constraint:
show
join-operator:
show
ordering-term:
show
result-column:
show
table-or-subquery:
show
type-name:
show
signed-number:
show
ATTACH DATABASE 语句将另一个数据库文件添加到当前数据库连接。先前附加的数据库文件可以使用 DETACH DATABASE 命令删除。
要附加的数据库的文件名是在 AS 关键字之前出现的表达式的值。数据库的文件名遵循与 sqlite3_open() 和 sqlite3_open_v2() 的文件名参数相同的语义。特殊名称“:memory:”会生成内存数据库,而空字符串会生成新的临时数据库。如果在数据库连接上启用了 URI 文件名处理,则 filename 参数可以是一个 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 设置可以同时连接到单个数据库连接的数据库的数量。