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