概要
SQLiteでは1ファイルを1データベースとして扱う。 複数のデータベースを同時に操作する場合、 まず一つ目のデータベースファイルに接続し、 二つのデータベースファイルをアタッチ(接続)する。 使用後はデタッチ(切り離し)すればいい。
構文
データベースをアタッチ(接続)する
attach database database_path as alias_name;
データベースをデタッチ(切り離し)する
detach alias_name;
仕様
アタッチするデータベースには別名をつけておき、 selectやinsertを利用する際は「別名.テーブル名」でアクセスする。 最初に接続したデータベースは「main.テーブル名」でアクセスする。 テーブル名だけでもアクセス出来るが、同じテーブル名が別々のデータベースにあった場合 どちらを操作しているかわかりづらくなってしまう。 データベースをデタッチする際も別名を指定する。
同時にアタッチできるデータベースの数は10個。
実行例
2つのデータベースを跨ってテーブルを結合してselectしてみる。
実行環境
- Windows 10 64bit
- SQLite3 (3.36.0) Command-Line Shell
C:\temp>rem # 1.
C:\temp>sqlite3 ./sample1.db
SQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
sqlite> -- # 2.
sqlite> attach database "./sample2.db" as sub;
sqlite> -- # 3.
sqlite> .databases
main: C:\temp\sample1.db r/w
sub: C:\temp\sample2.db r/w
sqlite> .headers on
sqlite> .mode box
sqlite> -- #4.
sqlite> select
...> main.product.id as id_1
...> , main.product.name as name_1
...> , sub.product.id as id_2
...> , sub.product.name as name_2
...> from
...> main.product
...> left join
...> sub.product
...> on
...> main.product.id = sub.product.id
...> ;
┌──────┬─────────┬──────┬────────┐
│ id_1 │ name_1 │ id_2 │ name_2 │
├──────┼─────────┼──────┼────────┤
│ 1 │ tomato │ 1 │ tomato │
│ 2 │ potato │ 2 │ potato │
│ 3 │ pumpkin │ │ │
└──────┴─────────┴──────┴────────┘
sqlite> -- # 5.
sqlite> detach sub;
sqlite> .databases
main: C:\temp\sample1.db r/w
- sample1.db に接続する。
- sample2.db を別名subでアタッチする。
- コマンドラインツールであれば接続しているデータベースを「.databases」で確認できる。
- sample1.db の user テーブルとsample2.db の user テーブルを結合して取得する。
- sample2.db をデタッチする。
insert、update、delete なども使えるので サブクエリ等を上手く使えば2つのデータベース間でデータのやり取りが出来る。
同時にアタッチできるデータベースの数は10個
10個以上アタッチしようとすると「Error: too many attached databases - max 10」というエラーが出る。
sqlite> .databases
main: C:\temp\sample0.db r/w
sub1: C:\temp\sample1.db r/w
sub2: C:\temp\sample2.db r/w
sub3: C:\temp\sample3.db r/w
sub4: C:\temp\sample4.db r/w
sub5: C:\temp\sample5.db r/w
sub6: C:\temp\sample6.db r/w
sub7: C:\temp\sample7.db r/w
sub8: C:\temp\sample8.db r/w
sub9: C:\temp\sample9.db r/w
sub10: C:\temp\sample10.db r/w
sqlite> attach database "./sample11.db" as sub11;
Error: too many attached databases - max 10
参考URL
-
ATTACH DATABASE
公式のattach database に関するドキュメント
https://www.sqlite.org/lang_attach.html -
Maximum Number Of Attached Databases
公式のアタッチできるデータベースの最大値に関するドキュメント
https://www.sqlite.org/limits.html#max_attached