sql-statement ::= | ATTACH [DATABASE] database-filename AS database-name |
ATTACH DATABASE语句将一个已存在的数据库添加到当前数据库连接。若文件名含标点符号,则应用引号引起来。 数据库名’main’和’temp’代表主数据库和用于存放临时表的数据库,它们不能被拆分。拆分数据库使用 DETACH DATABASE语句。
你可以读写附加数据库,或改变其结构。这是SQLite3.0提供的新特性。在SQLite 2.8中,改变附加数据库的结构是不允许的。
在附加数据库中添加一个与已有表同名的表是不允许的。但你可以附加带有与主数据库中的表同名的表的数据库。也可以多次附加同一数据库。
使用database-name.table-name来引用附加数据库中的表。若附加数据库中的表与主数据库的表不重名,则不需加数据库名作为前缀。当数据库被附加时,它的所有不重名的表成为该名字指向的缺省表。之后附加的任意与之同名的表需要加前缀。若“缺省”表被拆分, 则最后附加的同名表变为“缺省”表。
若主数据库不是":memory:",多附加数据库的事务是原子的。若主数据库是":memory:"则事务在每个独立文件中依然是原子的。 但若主机在改变两个或更多数据库的COMMIT语句进行时崩溃,则可能一部分文件被改变而其他的保持原样。附加数据库的原子性的提交 是SQLite 3.0的新特性。在SQLite 2.8中,所有附加数据库的提交类似于主数据库是":memory:"时的情况。
对附加数据库的数目有编译时的限制,最多10个附加数据库。