sqlite有些常用命令,对应用sqlite数据有很大用途。
下面详细讲解一下:
sqlITE_MASTER 表
一个sqlite数据库的数据结构是存贮在 "sqlite_master" 表中。你可以像其他数据表一样对 sqlite_master 表执行 “SELECT” 语句,例如:
#sqlite3 ex1
sqlite vresion 3.3.10
Enter ".help" for instructions
sqlite>select * from sqlite_master;
type = table
tbl_name = tbl1
name = tbl1
rootpage = 3
sql = create table tbl1(one varchar(10),two smallint)
sqlite>
将结果写到文件
默认情况下,sqlite3会将结果发送到标准输出,你可以使用 ".output" 来改变,只是将输出到的文件名作为参数传递给 .output,所有后面的查询结果都会写到文件里。开头使用 ".output stdout" 会再次写到标准输出,例如:
sqlite>.mode list 显示模式
sqlite>.separator | 字段直接间隔
sqlite>.output test_file_1.txt 输出到那个文件
sqlite>select * from tb1; 查询数据
sqlite>.exit 退出
#
hello|10
goodbye|20
改变输出格式
sqlite3程序可以以八种不同的格式显示一个查询的结果:"csv","列","html","插入","行","制表"和"tcl"。你可以用".mode"点命令在这些输出格式之间切换。
sqlite>
sqlite>
hello|10
goodbye|20
sqlite>
sqlite>
sqlite>
hello,
goodbye,
sqlite>
sqlite>
sqlite>
one
two
one
two
sqlite>
sqlite>
sqlite>
one
----------
hello
goodbye
sqlite>
sqlite>
.width 12 6
sqlite>select * from tbl1;
onetwo
------------------
hello10
goodbye20
sqlite>
sqlite>
.header off
sqlite>select * from tb1;
hello10
goodbye20
sqlite>.header
on可以打开列标示;
sqlite>
.mode insert new_table
sqlite>select * from tb1;
INSERTINTO 'new_table' VALUES('hello',10);
INSERTINTO 'new_table' VALUES('goodbye',20);
sqlite>
sqlite> .mode html
sqlite> select * from tb1;
<TR><TD>hello!</TD>
<TD>10</TD>
</TR>
<TR><TD>hello!</TD>
<TD>10</TD>
</TR>
<TR><TD>hello!</TD>
<TD>10</TD>
</TR>
<TR><TD>hello!</TD>
<TD>10</TD>
</TR>
<TR><TD>goodbye</TD>
<TD>20</TD>
</TR>
SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%' UNION ALL SELECT name FROM sqlite_temp_master WHERE type IN ('table','view') ORDER BY 1
事实上,你可以查看sqlite3的源代码(可以在源文件树的src/shell.c中),你可找到上面的具体的查询。
“.indices”命令作用类似的方式是列出特定表的所有的索引。“.indics”命令须一个参数即所要索引表的表名。最后,但不是至少,是“.schema”命令。不带任何参数,“.schema”命令显示原始的用于创建当前数据库的CREATE TABLE和CREATE INDEX语句。如果你给".schema"命令一个表名,它显示原始的创建该表和它所有索引的CREATE语句。我们可以:
sqlite>.schema
createtabletbl1(onevarchar(10),twosmallint)
CREATETABLEtbl2(
f1varchar(30)primarykey,f2text,f3real
)
sqlite>.schematbl2
CREATETABLEtbl2(
f1varchar(30)primarykey,f3real
)
sqlite>
".schema"命令可以用设置列表然后执行以下查询来实现:
或者,如果你给".schema"命令一个参数,由于你只想得到一个表的结构,查询可以是这样:
SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE type!='Meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%' ORDER BY substr(type,2,1),name
你可以担供一个参数给.schema命令。如果这橛,查询可以是这样的:
SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master) WHERE tbl_name LIKE '%s' AND type!='Meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%' ORDER BY substr(type,name
在查询中“%S“为你的参数所取代。这使你可以询数据库结构的某个子集。
sqlite>.schema%abc%
与这些一起,“.table”命令也接受一个模式作为他的参数。如果你给“.table”一个参数,“%”将被前后扩展并且一个LIKE子句被附加到查询上。这让你可以列出只与特定模式相匹配的的表。
“.datebaSAE”命令显示所有当前连接打开的数据库的一个列表。将允许一次到少两个。第一个是“main”,最初打开的那个数据库。第二个是"temp",用于临时表的数据库。对于用ATTACH语句附加的数据也许有附加数据库列表。输出的第一列与之相联的数据库名,第二列是外部文件名。
sqlite>
.databases sqlite> .databases seqname file ------------------ ---------------------------------------------------------- 0main //ex1 1temp /tmp/etilqs_SAmtUWMcNv0tqMn 将整个数据库转换为ASCII文本文件
".dump"命令成一个单一的ASCII文本文件。这个文件可以被用作管道传递给sqlite3命令来转换回数据库。
一个最好的制作一个数据库档案拷贝的命令是:
$
echo '.dump' | sqlite3 ex1 | gzip -c >ex1.dump.gz 它产生一个一个名为ex1.dump.gz的文件,它包含了你以后或在其它机器上重构数据库的所有的信息。要重构数据库,只须敲入:
$
zcat ex1.dump.gz | sqlite3 ex2 这个文本格式是纯粹的sql语句所以你可以用.dump命令来导出一个sqlite数据库到另一个常用的sql数据库引擎。比如:
$
createdb ex2 $sqlite3 ex1 .dump | psql ex2 其它的点命令
".explain"命令可以被用来设置输出格式为“column”
并设置列宽为EXPLAIN命令看起来比较合理的宽度。EXPLAIN命令是sqlite特有的sql扩展,它是对调试有用。如果任何常规的sql被EXPLAIN执行,那么sql命令被分解并分析但并不执行。取而代之的是,虚拟机指令序列将被用于执行sql命令并返回一个类似的查询结果。如: “.timeout”命令设置sqlite3等待一个试图存储文件锁定请除直到错误返回的总时间。默认的超时值是0因此如果任何需要的数据库表或序列列被锁定时它将立即返回一个错误。
sqlite>
.explain
sqlite>explain delete from tbl1 where two<20;
addropcode p1 p2 p3
---------------- ----- ----- -------------------------------------
0ListOpen 0 0
1Open 0 1 tbl1
2Next 0 9
3Field 0 1
4Integer 20 0
5Ge