ATTACH DATABASE
| sql-statement ::= | ATTACH [DATABASE] database-filename AS database-name |
ATTACH DATABASE ステートメントは、現在のデータベース接続に既存のデータベースファイルを 追加します。 ファイル名に句読文字を含む場合、クオートしなければいけません。 'main' そして 'temp' という名前は、メインデータベースと一時テーブルに使われるデータベースを 意味します。 これらを分離することはできません。 アタッチされたデータベースは、DETACH DATABASE ステートメントを使って削除します。
アタッチされたデータベースは、読み込み、書き込み、スキーマの修正ができます。 これは、SQLite バージョン 3.0 の新機能です。 SQLite 2.8 では、アタッチされたデータベースに対するスキーマの変更ができませんでした。
アタッチされたデータベース内のテーブルと同じ名前の新しいテーブルを作ることはできません。 しかし、メインデータベース内のテーブルと同名のテーブルを持つデータベースを アタッチすることはできます。 同様に、同じデータベースファイルを複数回アタッチすることは許可されます。
アタッチされたデータベース内のテーブルは、database-name.table-name 構文を 使って参照できます。 アタッチされたテーブルがメインデータベース内に重複するテーブル名を持たない場合、 データベース名プレフィックスは必要ありません。 データベースがアタッチされたとき、その重複する名前を持たないテーブルは その名前の 'default' テーブルとなります。 その後アタッチされる同名のテーブルはテーブルプレフィックスが必要になります。 与えられた名前の 'default' テーブルがデタッチされた場合、 その名前のアタッチされた最後のテーブルが新しいデフォルトとなります。
メインデータベースが ":memory:" でないと仮定すると、 トランザクションを伴う複数のアタッチされたデータベースはアトミックです。 メインデータベースが ":memory:" の場合、個々のデータベースそれぞれの中で トランザクションはアトミックでありつづけます。 しかし、2つ以上のデータベースファイルが更新されるコミットの途中でホストコンピューターが クラッシュした場合、これらのうちいくつかのファイルが変更を受け、その他は変更を受けない という場合があるかもしれません。 アタッチされたデータベースのアトミックコミットは、SQLite バージョン 3.0 の新機能です。 SQLite バージョン 2.8 では、アタッチされたデータベースのすべてのコミットは メインデータベースが ":memory:" であった場合のように振る舞っていました。
アタッチされたデータベースファイルはコンパイル時に10個に制限されています。