第二章 開始啦
Command-Line Program
shell mode
輸入sqlite3
即可莹妒。如果不指定數(shù)據(jù)庫名字,sqlite會使用in-memory數(shù)據(jù)庫。
可以使用CLP作為交互式的shell。所有輸入會被作為query启搂,以.
開頭的命令會作為CLP操作硼控。
- .help
- .exit
- .show
command-line mode
數(shù)據(jù)庫管理
創(chuàng)建數(shù)據(jù)庫
sqlite3 test.db
不會實際創(chuàng)建數(shù)據(jù)庫文件,直到我們創(chuàng)建了table胳赌。這之前可以設(shè)置page size, character encodeing等不太容易更改的屬性牢撼。
創(chuàng)建table
sqlite> create table test (id integer primary key, value text);
當(dāng)一列屬性為integer primary key時,這列會自增疑苫。
增加數(shù)據(jù)
sqlite> insert into test (id, value) values(1, 'eenie');
sqlite> insert into test (id, value) values(2, 'meenie');
sqlite> insert into test (value) values('miny');
sqlite> insert into test (value) values('mo');
讀取數(shù)據(jù)
sqlite> .mode column
sqlite> .headers on
sqlite> select * from test;
前兩行是為了格式化輸出
id value
---------- ----------
1 eenie
2 meenie
3 miny
4 mo
創(chuàng)建index和view
sqlite> create index test_idx on test (value);
sqlite> create view schema as select * from sqlite_master;
獲取數(shù)據(jù)庫schema信息
.table [pattern]
查詢table和view的信息
sqlite> .tables
schema test
.indices [table name]
查詢indexes信息
sqlite> .indices test
test_idx
.schema [table name]
查詢table或view的SQL定義熏版。(DDL)
sqlite> .schema
CREATE TABLE test (id integer primary key, value text);
CREATE INDEX test_idx on test (value);
CREATE VIEW schema as select * from sqlite_master;
查詢sqlite_master
獲取更多信息
sqlite> select type, name,tbl_name,sql from sqlite_master order by type;
type name tbl_name sql
---------- ---------- ---------- -------------------------------------
index test_idx test CREATE INDEX test_idx on test (value)
table test test CREATE TABLE test (id integer primary
view schema schema CREATE VIEW schema as select * from s
導(dǎo)出數(shù)據(jù)
使用.dump
導(dǎo)出數(shù)據(jù)庫對象為SQL格式到輸出。默認(rèn)輸出為屏幕缀匕∧删觯可以通過.output
命令改變輸出。
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE test (id integer primary key, value text);
INSERT INTO "test" VALUES(1,'eenie');
INSERT INTO "test" VALUES(2,'meenie');
INSERT INTO "test" VALUES(3,'miny');
INSERT INTO "test" VALUES(4,'mo');
CREATE INDEX test_idx on test (value);
CREATE VIEW schema as select * from sqlite_master;
COMMIT;
導(dǎo)入數(shù)據(jù)
- SQL格式的數(shù)據(jù)庫,使用
.read
命令乡小。 - 如果是CSV或其他被分割的數(shù)據(jù),使用
.import [file][table]
命令饵史÷樱可以通過.separator
命令更改分隔符。
格式化
-
.echo
. 打開胳喷,執(zhí)行一個命令湃番,會輸出命令。 -
.headers
. on,輸出包含列名吭露。 -
.prompt
更改提示語吠撮。 -
.nullvalue
空值的顯示 -
.mode
設(shè)置輸出的格式ascii column csv html insert line list tabs tcl
其中一個
導(dǎo)出delimited數(shù)據(jù)
執(zhí)行unattended命令(command-line 方式)
有兩種方式
-
提供SQL命令
sqlite3 test.db .dump
sqlite3 test.db "select * from test"
通過重定向?qū)⑽募鳛檩斎搿?br>
sqlite3 test2.db <test.sql
備份數(shù)據(jù)庫
.dump
命令導(dǎo)出SQL格式。-
制作二進(jìn)制備份讲竿。先壓縮泥兰,減少體積。
sqlite3 test.db vacuum
cp test.db test.backup
一般來說题禀,二進(jìn)制備份并沒有SQL備份具有可移植性鞋诗。
**注意:**無論備份做的多好,其效果取決于數(shù)據(jù)恢復(fù)方法迈嘹。
###獲取數(shù)據(jù)庫文件信息
使用sqlite3_analyzer工具削彬。