`
mmdev
  • 浏览: 12892383 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

sqlite3命令详解(下)

 
阅读更多
sqlite3提供了多个命令来查看数据库的schema
".tables"命令可以查看当前数据库所有的表
比如,示例14
sqlite>.tables
tbl1
tbl2
sqlite>
".tables"和在list模式下执行下面的语句相似:
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程序的源码 (found in the source tree in the file src/shell.c), you'll find exactly the above query.
另外,".tables"命令后也可以跟一参数,它是一个pattern,这样命令就只列出表名和该参数匹配的表。
比如,示例14-1:
sqlite>.tables
.tables
android_metadata bookmarks system
bluetooth_devices secure
sqlite>.tables s%
.tables s%
secure sqlite_sequence system
sqlite>
".indices"命令列出指定表的所有indices(索引)。第一个参数为表的名字。
比如,示例15
sqlite> .schema system
.schema system
CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C
ONFLICT REPLACE,value TEXT);
CREATE INDEX systemIndex1 ON system (name);
sqlite>.tables
.tables
android_metadata bookmarks system
bluetooth_devices secure
sqlite>.indices system
.indices system
sqlite_autoindex_system_1
systemIndex1
sqlite>
".schema"命令在没有参数的情况,它会显示最初用于创建数据库的CREATE TABLE和CREATE INDEX的SQL语句。比如,示例16
".schema"命令可以包含一个参数,它是一个pattern,用于对表进行过滤,这时只会显示满足条件的表和所有索引的SQL语句。
比如,示例15示例17.
示例16
sqlite> .schema
.schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE bluetooth_devices (_id INTEGER PRIMARY KEY,name TEXT,addr TEXT,chan
nel INTEGER,type INTEGER);
CREATE TABLE bookmarks (_id INTEGER PRIMARY KEY,title TEXT,folder TEXT,intent TE
XT,shortcut INTEGER,ordering INTEGER);
CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C
ONFLICT REPLACE,value TEXT);
CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C
ONFLICT REPLACE,value TEXT);
CREATE INDEX bookmarksIndex1 ON bookmarks (folder);
CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);
CREATE INDEX secureIndex1 ON secure (name);
CREATE INDEX systemIndex1 ON system (name);
sqlite>
示例17
sqlite>.schema s%
.schema s%
CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C
ONFLICT REPLACE,value TEXT);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C
ONFLICT REPLACE,value TEXT);
CREATE INDEX secureIndex1 ON secure (name);
CREATE INDEX systemIndex1 ON system (name);
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",以表明只想得到表的schema而包括索引的schema,那么SQL语句应该如下:
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”支持参数. 那么SQL语句应该如下:
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
这里SQL语句中的"%s"将被你传入的参数代替. 你就可以只显示一部分的schema.
事实上".tables"的也是采用这种"LIKE"的方式,进行pattern查询的。
".databases"命令将列出当前connection中所有的数据库。
一般至少包含2个,一个是"main", the original database opened.另一个是"temp", the database used for temporary tables.
There may be additional databases listed for databases attached using the ATTACH statement.
The first output column is the name the database is attached with, and the second column is the filename of the external file.
".dump"命令将把database的内容转化为一个ASCII编码的文本文件。
This file can be converted back into a database by piping it back into sqlite3.
把一个数据库进行archival备份可以用如下的命令:
$ echo '.dump' | sqlite3 ex1 | gzip -c >ex1.dump.gz
这样将生产一个名叫 ex1.dump.gz的文件,它包含了重新构建数据库的所有信息
重新构建数据库。只需要如下的语句:
$ zcat ex1.dump.gz | sqlite3 ex2
因为文本格式是纯SQL的 ,所以你可以通过.dump命令把你的数据库导入到另外的更常用的数据库引擎.
比如:
$ createdb ex2
$ sqlite3 ex1 .dump | psql ex2
The ".explain" dot command can be used to set the output mode to "column" and
to set the column widths to values that are reasonable for looking at the output of an EXPLAIN command.
The EXPLAIN command is an SQLite-specific SQL extension that is useful for debugging.
If any regular SQL is prefaced by EXPLAIN, then the SQL command is parsed and analyzed but is not executed.
Instead, the sequence of virtual machine instructions that would have been used to execute the SQL command are returned like a query result.
For example:

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
The ".timeout" command sets the amount of time that the sqlite3 program will wait for locks to clear on files it is trying to access before returning an error. The default value of the timeout is zero so that an error is returned immediately if any needed database table or index is locked.
".exit和“.quite"命令用于退出sqlite3程序.他们好像没有什么区别
如何以Shell脚本的方式使用sqlite3命令
一种方式是用"echo"或"cat"命令输出一些sqlite3命令到一个文件,然后执行程序sqlite3,并把该文件作为sqlite3的输入流。这种方式不错,很多程序都可以这样。
另一种方式是:以SQL语句作为sqlite3的第二个参数,在执行SQL操作。为了方便, sqlite3允许在第一个参数数据库名后,再跟一个参数,来指定要执行的SQL语句。如果sqlite3带2个参数进行启动的话,第二个参数将做为SQL传递给SQLite library来处理, 返回结果将以list模式在标准输出中进行显示,然后sqlite3程序也退出了。
比如,示例17
# sqlite3 /data/data/com.android.providers.settings/databases/settings.db "select * from system;select * from system"
以SQL语句作为sqlite3的第二个参数,这种方式主要是为了sqlite3和其他程序(比如"awk")联合使用.
比如,示例18:
$sqlite3 ex1 'select * from tbl1' |
>awk '{printf "<tr><td>%s<td>%s\n",$1,$2 }'
<tr><td>hello<td>10
<tr><td>goodbye<td>20
$
SQL语句的结束符
一般sqlite3的SQL语句的结束符是分号";". 然而你在shell中运行sqlite3时你还可以使用 "GO" (大写) 或 "/"来作为一条SQL语句结束的标志. 他们分别在SQL Server和Oracle中被使用. 但是他在sqlite3_exec()不能使用shell会先把他们转化为分号";",然后再传递到该函数.
在源码中编译sqlite3
The sqlite3 program is built automatically when you compile the 当你编译SQLite library的时候,sqlite程序就自动被编译了. Just get a copy of the source tree, run "configure" and then "make".
分享到:
评论

相关推荐

    android-SQLite3命令详解教程

    android-SQLite3命令详解教程,转发分享

    Android Sqlite命令详解(基本命令)

    主要介绍了Android Sqlite命令详解(基本命令)的相关资料,需要的朋友可以参考下

    基于Android SQLite的升级详解

    SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段。 并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段: 代码如下:ALTER TABLE Subscription ADD ...

    详解Python 数据库 (sqlite3)应用

    Python标准库中的sqlite3提供该数据库的接口。 我将创建一个简单的关系型数据库,为一个书店存储书的分类和价格。数据库中包含两个表:category用于记录分类,book用于记录某个书的信息。一本书归属于某一个分类,...

    解析SQLite中的常见问题与总结详解

    2、 如何通过sqlite3.dll与sqlite3.def生成sqlite3.lib文件LIB /DEF:sqlite3.def /machine:IX863、 sqlite3_open打开一个数据库时,如果数据库不存在就会新生成一个数据库文件。如果接着执行其他查询语句就会失败,...

    DJango的创建和使用详解(默认数据库sqlite3)

    3)编辑家目录下面的.bashrc文件,添加下面两行。 export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh 4)使用source .bashrc使其生效一下。 创建虚拟环境命令: mkvirtualenv 虚拟...

    rest-smtp-sink:与fakesmtp相似,rest-smtp-sink是SMTP服务器和Web服务器。 它将收到的电子邮件存储在SQLite数据库中,并通过其自己的带有RESTful API的Web服务器为它们提供服务

    与相似,rest-smtp-sink是SMTP服务器和Web服务器。 它将收到的电子邮件存储在数据库中,并使用RESTful API通过自己的Web服务器为其提供服务。 安装 npm install -g rest-smtp-sink ... SQLite数据库文件

    微信小程序 本地数据存储实例详解

    微信小程序 本地数据存储实例详解 前言 如果您在看此文章之前有过其他程序的开发经验,那一定会知道一般例如安卓或者苹果的原生APP都提供了本地的存储功能,甚至可以使用sqlite数据库来做存储。可是微信的小程序框架...

    android系统contentprovier和数据库详解

    详细阐述contentprovier相关的类,用法,以及先关SQLITE数据的语句,语法,命令等

    详解iOS的数据存储

     4.SQLite3  5.Core Data 应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录)与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒. 模拟器应用沙盒的根路径在: (apple是...

    编程狂人第九期(2014-1-20)

    Android 学习笔记之 SQLite基础用法 如何充分利用 Windows Phone 高清屏幕 【cocos2d-x 手游研发----博彩大转盘】 后端架构 回顾2013:HBase的提升与挑战 memcached(十七)协议命令格式 nginx大流量负载调优 12306...

    linux下编译安装kangle web server教程详解

    首先下载kangle kangle web server源代码。...yum -y install wget make automake gcc gcc-c++ pcre-devel zlib-devel sqlite-devel openssl-devel 第一步 下载kangle linux版源代码: 下载后我们会得到kangle-3.4.8

    go语言web编程

    1.3. Go 命令 1.4. Go开发工具 1.5. 小结 2.Go语言基础 2.1. 你好,Go 2.2. Go基础 2.3. 流程和函数 2.4. struct 2.5. 面向对象 2.6. interface 2.7. 并发 2.8. 小结 3.Web基础 3.1 web工作方式 3.2 Go搭建一个简单...

    [Django] Django 连接 MySQL数据库 以及 makemigrations&migrate 过程详解总结

    Django 连接 MySQL数据库过程安装MySQL数据库安装mysqlclient包配置settings.py文件生成迁移文件ORM迁移文件具体操作生成数据库的表 ...安装命令pip3 install mysqlclient(blog) [root@centos7 testBl

    Android文件操作

    他在Android手机中存放在nandflash的 mtd3中,是一个yaffs2文件系统,在启动时被挂载在root的/system目录下,其中包含有: # ls -a -l /system drwxr-xr-x root 208 1970-01-01 08:00 xbin drwxr-xr-x root root ...

    asp.net知识库

    ASP.NET2.0 ObjectDataSource的使用详解(3) ASP.NET2.0 快速入门 ----默认中的主题外观 数据库开发 ADO.NET 通过DataTable获得表的主键 ADO.NET 2.0 操作实例 ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO...

    php-7.2.26.tar.xz

    --with-pdo-sqlite \ --with-pdo-mysql \ --with-mysqli \ --with-mysql-sock \ --enable-mysqlnd \ --disable-rpath \ --enable-inline-optimization \ --with-bz2 \ --with-zlib \ --enable-sockets \ -...

Global site tag (gtag.js) - Google Analytics