SQLlite數據庫中的附加和分離

   在SQLlite數據庫中每每一個數據文件就是一個schema,可是在平時的業務或者是一些條件中多是不一樣的內容存放在不一樣的schema中,即不一樣的數據文件,有的場景下須要數據關聯時就能夠使用SQLlite的數據附加來創建一個臨時的連接。以下,在使用my_test的schema時須要關聯查詢一個爲my_test2的schema就能夠使用附加:sql

[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

固然有若是有附件數據庫那必定有分離,分離就比較簡單:bash

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下的其餘數據文件,在這裏要特別注意的是若是分離的數據庫是在內存或臨時空間內,分離後會銷燬其分離的數據session

相關文章
相關標籤/搜索