sqlite常用命令
原创转自: http://www.cnblogs.com/caizhimin816/articles/1885349.html
Sqlite shell http://www.sqlite.org/download.html 页面 Precompiled Binaries for Windows
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 = tbl1name = 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 退出
# cat test_file_1.txt**
hello|10
goodbye|20
更改输出格式
sqlite3该程序可以以八种不同的格式显示查询结果:"csv", "列", "html", "插入", "行", "制表"和"tcl"。您可以使用".mode"单击命令可在这些输出格式之间切换。
默认输出格式为“列表”。在列表模式下,每个查询结果记录都写在一行中,并在每列之间用字符串分隔符分隔。默认分隔符是竖线符号(”|")。将查询结果输出到另一个符号处理程序(例如AWK)走到中间特别有用。
sqlite> .mode list
sqlite> *select from tb1;**
hello|10
goodbye|20
sqlite>
你可以使用”.separator“单击命令以更改分隔符。例如,要将分隔符更改为逗号和空格,可以执行以下操作:
sqlite> .separator ", "
sqlite> *select from tb1;**
hello, 10
goodbye, 20
sqlite>
在“line"在模式下,位于记录中的每个列都显示在自己的行中。每行由列名、等号和列数据组成。用空行分隔下一条记录。这是线路模式输出的示例:
sqlite> .mode line
sqlite> *select from tb1;**
one = hello
two = 10
one = goodbye
two = 20
sqlite>
在列模式下,每条记录都显示在单独的行中,数据列对齐。列为:
sqlite> .mode column
sqlite> *select from tbl1;**
one two
hello 10
goodbye 20
sqlite>
默认情况下,每列应至少具有10个字符宽。太宽的数据将被截取。你可以使用”.width“调整列宽的命令。如下:
sqlite> .width 12 6
sqlite> *select from tbl1;**
one two
hello 10
goodbye 20
sqlite>
在上面的例子中".width"将第一列的宽度设置为12第二列的宽度为6。其他列宽保持不变。您可以根据需要为查询结果指定任意数量的列”.width”参数。
如果指定列宽0列宽将自动基于以下三个数字中的最大值:10标题的宽度和最宽数据列的宽度。这允许列自动调整其宽度。自动调整每列的默认设置0值。
可以使用输出前两行中显示的列标签".header"单击命令以关闭。在上面的示例中,列标签是打开的。您可以使用以下方法关闭列标签:
sqlite> .header off
sqlite> *select from tb1;**
hello 10
goodbye 20
sqlite>.header on可以打开列标签;
另一个有用的输出模式是"insert"。在插入模式下,面组的格式类似于SQL INSERT语句的样式。您可以使用插入模式来产生文件(便于)以后用于不同数据库的输入。
指定插入模式时,必须提供一个特定参数,该参数是要插入的表的名称。例如:
sqlite> .mode insert new_table
sqlite> *select from tb1;**
INSERT INTO new_table VALUES(hello,10);
INSERT INTO new_table VALUES(goodbye,20);
sqlite>
最新的输出格式是”html"。在这种模式下,sqlite3将查询结果编写为XHTML桌子。开始
sqlite> .mode html
sqlite> select * from tb1;hello! 10 hello! 10 hello! 10 hello! 10 goodbye 20
查询数据库结构
sqlite3该程序提供了几个有用的快捷命令来查询数据库结构。这些都无法通过其他方式实现。这些命令只是快捷方式。
例如,要查看数据库中的表列表,可以键入”.tables”。
sqlite> .tables
tbl1
tbl2
sqlite>
“.tables“该命令类似于设置列表模式,然后执行以下查询:
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 create table tbl1(one varchar(10), two smallint) CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real ) sqlite> .schema tbl2 CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real ) sqlite>
".schema"可以通过设置列表然后执行以下查询来实现该命令:
SELECT sql FROM (SELECT FROM sqlite_master UNION ALL SELECT FROM sqlite_temp_master) WHERE type!=meta ORDER BY tbl_name, type DESC, name
或者,如果你给".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,2,1), name
在查询中”%S替换为您的参数。这允许您查询数据库结构的子集。
sqlite> .schema %abc%
连同这些”.table“该命令还接受模式作为其参数。如果你给”.table“一个参数”%“将前后扩展,并且LIKE该子句将附加到查询。这允许您列出仅与特定模式匹配的表。
“.datebasae“该命令显示所有当前连接的打开数据库的列表。允许一到至少两个。第一个是”main“最初打开的数据库。第二个是"temp"用于临时表的数据库。对于使用ATTACH附加到语句的数据可能具有附加的数据库列表。输出的第一列是与其关联的数据库名称,第二列是外部文件名。
sqlite> .databases
sqlite> .databases seq name file
--- --------------- ----------------------------------------------------------
0 main //ex1
1 temp /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;
addr opcode p1 p2 p3
0 ListOpen 0 0
1 Open 0 1 tbl1
2 Next 0 9
3 Field 0 1
4 Integer 20 0
5 Ge 0 2
6 Key 0 0
7 ListWrite 0 0
8 Goto 0 2
9 Noop 0 0
10 ListRewind 0 0
11 ListRead 0 14
12 Delete 0 0
13 Goto 0 11
14 ListClose 0 0在命令和脚本中使用sqlite3
使用sqlite3方法是使用”echo”或“cat“在文件中生成命令序列,然后在从生成的命令行重定向输入时调用sqlite3。它很有用,并且适用于许多环境。但作为额外的便利,sqlite3允许单个SQL该语句作为命令行上数据库名称之后的第二个参数输入。什么时候sqlite3当程序以两个参数启动时,第二个参数将传递给SQLite库处理,将列表模式下的查询打印到标准输出,然后退出程序。此机制旨在允许sqlite3易于使用的连接,例如"AWK"程序。例如:
# *sqlite3 ex1 select from tb1 |**
awk {printf "
%s %s\n",$1,$2 } hello 10 goodbye 20 # 结束命令行命令
SQLite命令通常以分号结尾。您也可以使用”GO“单词(区分大小写)或 a”/“斜杠结束其行上的命令。这通常是SQL Server和Oracle用。这些将不可用sqlite3_exec()这很有用,因为命令行在将它们传递给函数之前将它们转换为分号。
从源文件编译sqlite3
sqlite3编译程序时SQLite库将自动建立。只需获取源文件树的副本并运行它”configure"然后"make"即可。
其他sqlite特殊用法
sqlite可以在shell直接执行以下命令:
sqlite3 film.db "select * from film;"
输出 HTML 表格:
sqlite3 -html film.db "select * from film;"
反转数据库:
sqlite3 film.db ".dump" > output.sql
使用输出数据创建相同的数据库(使用上述说明,它是标准的SQL数据库备份):
sqlite3 film.db < output.sql
插入大量数据时,可能需要先键入以下命令:
begin;
插入数据后,请记住在将数据写入数据库之前键入以下命令:
commit;
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除