SQLlite數(shù)據(jù)庫中的附加和分離
在SQLlite數(shù)據(jù)庫中往往一個數(shù)據(jù)文件就是一個schema,但是在平時的業(yè)務(wù)或者是一些條件中可能是不同的內(nèi)容存放在不同的schema中,即不同的數(shù)據(jù)文件,有的場景下需要數(shù)據(jù)關(guān)聯(lián)時就可以使用SQLlite的數(shù)據(jù)附加來建立一個臨時的鏈接。如下,在使用my_test的schema時需要關(guān)聯(lián)查詢一個為my_test2的schema就可以使用附加:
- [root@localhost data]# sqlite3 my_test.db #在SQLlite數(shù)據(jù)庫中缺省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'; #在當(dāng)前schema下附加上/data/my_test2.db中的數(shù)據(jù),并且起一個別名為my_test2,當(dāng)然也可以起其他的名字
- 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'; #直接在當(dāng)前schema下使用/data/my_test2.db中的數(shù)據(jù),并且查看
- 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數(shù)據(jù)庫中的附加數(shù)據(jù)庫,它其實是一個鏈接,用于在不同的數(shù)據(jù)schma數(shù)據(jù)文件下使用其他的schma數(shù)據(jù)文件,在這里需要注意的是目前在SQLlite數(shù)據(jù)庫中附加是臨時的,在當(dāng)前session中創(chuàng)建一個鏈接,如果在退出這個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
- 當(dāng)然有如果有附件數(shù)據(jù)庫那一定有分離,分離就比較簡單:
- 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
這樣就成功的主動分離附加在當(dāng)前schma下的其他數(shù)據(jù)文件,在這里要特別注意的是如果分離的數(shù)據(jù)庫是在內(nèi)存或臨時空間內(nèi),分離后會銷毀其分離的數(shù)據(jù)。