SQLlite數據庫中的附加和分離
在SQLlite數據庫中往往一個數據文件就是一個schema,但是在平時的業務或者是一些條件中可能是不同的內容存放在不同的schema中,即不同的數據文件,有的場景下需要數據關聯時就可以使用SQLlite的數據附加來建立一個臨時的鏈接。如下,在使用my_test的schema時需要關聯查詢一個為my_test2的schema就可以使用附加:
- [root@localhost data]# sqlite3 my_test.db #在SQLlite數據庫中缺省database名為main
- SQLite version 3.6.20
- Enter ".help" for instructions
- Enter SQL statements terminated with a ";"
- sqlite> .database
- seq name file
- --- --------------- ----------------------------------------------------------
- 0 main /data/my_test.db
- sqlite> ATTACH DATABASE '/data/my_test2.db' As 'my_test2'; #在當前schema下附加上/data/my_test2.db中的數據,并且起一個別名為my_test2,當然也可以起其他的名字
- sqlite> .databases
- seq name file
- --- --------------- ----------------------------------------------------------
- 0 main /data/my_test.db
- 2 my_test2 /data/my_test2.db
- sqlite> CREATE TABLE my_test2.test_attach (
- ...> a int(10),
- ...> b int(10)
- ...> );
- sqlite> SELECT * FROM my_test2.sqlite_master WHERE type = 'table' AND tbl_name = 'test_attach'; #直接在當前schema下使用/data/my_test2.db中的數據,并且查看
- table|test_attach|test_attach|4|CREATE TABLE test_attach (
- a int(10),
- b int(10)
- )
- sqlite> .exit
- [root@localhost data]# sqlite3 /data/my_test2.db #切換成my_test2.db的schema查看驗證下
- SQLite version 3.6.20
- Enter ".help" for instructions
- Enter SQL statements terminated with a ";"
- sqlite> SELECT sql FROM sqlite_master WHERE type = 'table' AND tbl_name = 'test_attach';
- CREATE TABLE test_attach (
- a int(10),
- b int(10)
- )
如此就是在SQLlite數據庫中的附加數據庫,它其實是一個鏈接,用于在不同的數據schma數據文件下使用其他的schma數據文件,在這里需要注意的是目前在SQLlite數據庫中附加是臨時的,在當前session中創建一個鏈接,如果在退出這個session后附加就自動分離:
- [root@localhost data]# sqlite3 /data/my_test.db
- SQLite version 3.6.20
- Enter ".help" for instructions
- Enter SQL statements terminated with a ";"
- sqlite> .database
- seq name file
- --- --------------- ----------------------------------------------------------
- 0 main /data/my_test.db
- 當然有如果有附件數據庫那一定有分離,分離就比較簡單:
- sqlite> .databases
- seq name file
- --- --------------- ----------------------------------------------------------
- 0 main /data/my_test.db
- 2 my_test2 /data/my_test2.db
- sqlite> DETACH DATABASE "my_test2";
- sqlite> .databases
- seq name file
- --- --------------- ----------------------------------------------------------
- 0 main /data/my_test.db
這樣就成功的主動分離附加在當前schma下的其他數據文件,在這里要特別注意的是如果分離的數據庫是在內存或臨時空間內,分離后會銷毀其分離的數據。