命令⾏shell⽤于SQLite
转
SQLite 库包含了⼀个简单的命令⾏实⽤⼯具命名sqlite3 (或sqlite3exe 在windows 上), 它允许⽤户⼿动输⼊并执⾏SQL 命令针对⼀个SQLite 数据库此⽂档提供了有关如何使⽤简要介绍sqlite3 程序
使⽤⼊门
要启动"sqlite3 程序时, 只需键⼊"sqlite3 ", 后跟该⽂件SQLite , 该数据库如果该⽂件不存在, 则⾃动"sqlite3 程序将提⽰您要输⼊SQL在SQL 语句类型(由⼀个semicolon) 终⽌, SQL 按"enter ", 将会被执⾏
例如, 要创建⼀个新的名为"ex1 "SQLite 数据库使⽤⼀个"tbl1 名为的表", 可能会这样做:
$sqlite3 ex1
SQLite 版本3611
输⼊"帮助"有关说明
⽤"; "输⼊SQL 语句终⽌
sqlite > create table tbl1(one varchar(10) , 两个smallint) ;
sqlite > insert into tbl1 values( ''hello! '', 10) ;
sqlite > insert into tbl1 values( ''goodbye '' , 20) ;
sqlite > select *from tbl1 ;
hello!|10
goodbye|20
sqlite >
通过键⼊以下命令可以终⽌sqlite3 程序您的系统End-Of-File 字符(通常为Control-D)使⽤中断字符(通常是⼀个Control-C) 停⽌长时间运⾏的SQL 语句
请确认您键⼊⼀个分号!的每个SQL 命令结束时, sqlite3 程序时查⼀个分号知道您的SQL 命令如果省略分号, sqlite3 将给您继续符如果提⽰, 等待输⼊更多⽂本添加到当前SQL 命令此功能允许您要输⼊SQL 横跨多⾏例如:
sqlite > CREATE TABLE tbl2 (
...> f1 varchar(30 )主键,
...> f2 ⽂本.
...> f3 实数
...> );
sqlite >
除: 仅使⽤SQLITE_MASTER 表
将显⽰"数据库模式中的⼀个SQLite 数据库是存储在⼀个特殊的表格"sqlite_master "可以为特殊sqlite_master 表执⾏"SELECT "语句就像任何其他表在SQLite 数据库例如:
$sqlite3 ex1
SQLite 版本3611
输⼊"帮助"有关说明
sqlite > select *from sqlite_master ;
类型=表
名称=tbl1
tbl_name =tbl1
rootpage =3
sql =create table tbl1(one varchar(10) , 两个smallint )
sqlite >
但不能执⾏DROP TABLE, UPDATE, INSERT 或DELETE 对sqlite_master 表在sqlite_master 表⾃动为您创建或更新从数据库中删除表及索引不能⼿动修改sqlite_master 表
此模式的TEMPORARY 表没有存储在TEMPORARY "sqlite_master "表中的表是不可见的应⽤程序, 创建该表的应⽤程序此模式的TEMPORARY 表是存储在另⼀个特殊的表格"sqlite_temp_master """sqlite_temp_master "表是临时本⾝
特殊命令来sqlite3
在⼤多数情况下, sqlite3 上读取的输⼊, 并把它们拖到SQLite 库为执⾏但是, 如果⼀个输⼊⾏以点号("") 该⾏, 然后是截取和nocase sqlite3 程序本⾝"时, 通常使⽤这些"dot 命令来更改输出的格式, 或要执⾏的某些⾃带的查询的查询语句
有关服务器可⽤的点命令, 您可以输⼊"帮助"在任意时间例如:
sqlite > 帮助
备份? DB? FILE 备份DB (默认"main ")来FILE
bail ON|OFF 停⽌后, ⼀个错误默认OFF
列表名的数据库和⽂件附加数据库
转储? TABLE? 转储到数据库中SQL ⽂字格式
回⾳式ON|OFF 打开或关闭命令回显
exit 退出该程序
解释ON|OFF 关闭或输出模式适合于EXPLAIN
genfkey ? OPTIONS? 选项有:
--no-drop : 请不要删除旧fkey 触发器
--ignore-errors : 忽略表提供fkey 错误
--exec : ⽴即执⾏⽣成的SQL
请参阅⽂件tool/genfkeyREADME 在源
分发以获得进⼀步的信息
header(s )ON|OFF 关闭或显⽰的标题
help 显⽰此消息
导⼊FILE TABLE 在FILE TABLE
⽤于分隔索引TABLE 只显⽰指定的TABLE 上的所有索引
iotrace FILE 启⽤I/O 诊断⽇志记录设置为FILE
加载FILE ? ENTRY? 加载扩展库
模式MODE ? TABLE? 设置输出模式其中MODE 是以下值之⼀:
csv 以逗号分隔的值
列居中的列(参见宽度)
html HTML < 表格> 代码
为TABLE 插⼊SQL insert 语句
⾏每⾏对应⼀个值
列表中的值⽤分号分隔分隔字符串
标签tab-separated 值
tcl TCL 列表元素
nullvalue 将STRING 打印STRING 代替NULL 值
输出FILENAME 发送输出以FILENAME
输出stdout 发送输出到屏幕
提⽰MAIN CONTINUE 替换标准提⽰
quit 退出该程序
在FILENAME 读取FILENAME 执⾏SQL
还原? DB? FILE 还原DB 内容(默认的"main ")从FILE
架构? TABLE? 显⽰CREATE 语句
输出模式和使⽤的分隔符STRING 更改分隔符导⼊
显⽰显⽰当前的不同设置的值
表? PATTERN? 列表中的名称相匹配的表LIKE 图案
MS 请尝试打开MS 表锁定毫秒后超时
定时器ON|OFF 关闭或CPU 计时器测量
宽度NUM NUM设置"column 列宽"模式
sqlite >
更改输出格式
在sqlite3 程序能够显⽰查询的结果在⼋种不同的格式: "csv ""column ""html ""insert ""line ""list ""tabs "和"tcl "可以使⽤"模式"点命令要切换这些输出格式
输出模式的默认设置是"list "在"位置"中, 每个记录列表写⼊⼀次查询中每⼀⾏输出和记录是⼀个特定的分隔符分隔的字符串默认分隔符是⼀个管道符号("| ")列出模式时特别有⽤创建⼀个查询的输出发送给其他程序(例如⽤于其他处理的AWK)
sqlite > 模式列表
sqlite > select *from tbl1 ;
hello|10
goodbye|20
sqlite >
可以使⽤"分隔符"点命令更改分隔符为列表模式例如, 要将插⼊⼀个逗号和空格, 您也可以这样做:
sqlite > 分隔符", "
sqlite > select *from tbl1 ;
"你好, 10
再见, 20
sqlite >
在"line "模式下, 每⼀个列与数据库中的某⾏都在单独⼀⾏每⾏由等号列名, 并进⾏适当的更改连续记录通过⼀个空⾏分隔下⾯是⼀个例⼦模式⾏的输出:
sqlite > 模式⾏
sqlite > select *from tbl1 ;
⼀个=hello
两个=10
⼀个=再见
两个=20
sqlite >
在列模式中, 每个记录都在单独的⼀⾏中对齐与数据列例如:
sqlite > 模式列
sqlite > select *from tbl1 ;
⼀个两个
---------- ----------
hello 10
再见20
sqlite >
默认情况下, 每个列⾄少为10 个字符宽数据太⼤以适合列被截断使⽤"可以调整列宽宽度&w"命令像这样:
sqlite > 宽度12 6
sqlite > select *from tbl1 ;
⼀个两个
------------ ------
hello 10
再见20
sqlite >
"宽度&w"命令在以上⽰例中第⼀列的宽度设为指定值.以12 并第三列的宽度为6要查看所有其他列宽可以给出任意数量的参数来"在必要时宽度&w"以指定的列宽的任意多个列在您的查询结果
如果指定列的宽度值为0然后的列宽⾃动调整是最多只能有三个数字: 10页眉的宽度⾸⾏的宽度, 并将该数据这将使列宽self-adjusting每⼀列的宽度设置此auto-adjusting 默认值为0值
标志所在列的列标出现在前两⾏输出可以使⽤"打开和关闭header"点命令在上⾯的⽰例中, 列标签都在已开启您也可以这样做:
sqlite > 页眉处于关闭状态
sqlite > select *from tbl1 ;
hello 10
再见20
sqlite >
另⼀个有⽤的输出模式是"insert "在插⼊模式下, 则输出将会在格式化为看起来像是SQL INSERT 语句可以使⽤insert 模式来⽣成可以⽤来输⼊数据到不同的数据库
当指定插⼊模式, 您要创建⼀个额外的参数的名称输⼊的表不存档例如:
sqlite > 插⼊new_table 模式
sqlite > select *from tbl1 ;
INSERT INTO ''new_table "VALUES( ''hello '', 10);
INSERT INTO ''new_table "VALUES( ''goodbye '', 20);
sqlite >
最后⼀个输出模式为"html "在此模式下, sqlite3 写⼊查询的结果作为XHTML 表开始< TABLE > 和终⽌< /TABLE > 都不进⾏写⼊但所有罪< TR > s< TH > s和< TD > s是html输出的模式为CGI _ganglia.py 标为很有⽤
将结果写⼊⼀个⽂件
默认情况下, sqlite3 会发送: 使⽤"可以更改此"命令的输出只需将输出⽂件的名称为⼀个参数输出命令及所有后续查询结果将写⼊该⽂件使⽤"输出stdout "以开始写⼊标准输出例如:
sqlite > 模式列表
sqlite > 分隔符|
sqlite > 输出test_file_1⽂本⽂件txt
字符串截取第几行sqlite > select *from tbl1 ;
sqlite > 退出
$cat test_file_1⽂本⽂件txt
hello|10
goodbye|20
$
提交到数据库模式
指定sqlite3 程序提供了⼏个⽅便命令会⾮常有⽤启动时, 模式的数据库服务器名⽆效⽂档这些命令执⾏不能执⾏某些其他⽅式这些命令都提供了纯粹作为⼀种快捷⽅式
例如, 来查看数据库中的表的列表, 可以输⼊"表"
sqlite > 表
tbl1
tbl2
sqlite >
"列表模式下表"命令类似于设置然后执⾏以下查询:
SELECT 名称FROM sqlite_master
WHERE IN 类型('able '', ''view ")AND NOT LIKE '��qlite_% "
UNION ALL
SELECT 名称FROM sqlite_temp_master
WHERE IN 类型('able '', ''view '' )
ORDER BY 1
实际上, 如果您这样的源代码树sqlite3 程序(在列表中到⽂件src/shellc )您将发现完全符合上⾯的查询
"⽤于分隔索引的⼯作⽅式类似"命令来列出所有索引的表中"⽤于分隔索引"命令接受⼀个参数, 它是该名称表的索引不正确last, 但不能有,
为"架构"命令不带参数, 则"架构"命令显⽰原始CREATE TABLE 和CREATE INDEX 语句被⽤来⽣成当前的数据库如果允许⽤户名称"架构",它展⽰了在原始CREATE 语句⽤于将该表和全部如果它的索引我们有:
sqlite > 架构
create table tbl1(one varchar(10) , 两个smallint )
CREATE TABLE tbl2 (
f1 varchar(30 )主键,
f2 ⽂本.
f3 实数
)
sqlite > 架构tbl2
CREATE TABLE tbl2 (
f1 varchar(30 )主键,
f2 ⽂本.
f3 实数
)
sqlite >
"架构"命令完成设置效果相同的列表模式, 则输⼊以下查询:
SELECT sql FROM
(SELECT *FROM sqlite_master UNION ALL
SELECT *FROM sqlite_temp_master )
WHERE type!= ''meta "
ORDER BY tbl_name , 请输⼊DESC, 名
或者, 如果您给出的参数"架构", 因为您只想要为单个表架构, 该查询是这个样⼦:
SELECT sql FROM
(SELECT *FROM sqlite_master UNION ALL
SELECT *FROM sqlite_temp_master )
WHERE type!= ''meta "AND sql NOT NULL AND 名称NOT LIKE '��qlite_% "
ORDER BY substr(type, 2, 1) , 名称
您可以提供⼀个参数bcp命令如果您, 查询是这个样⼦:
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 名称NOT LIKE '��qlite_% "
ORDER BY substr(type, 2, 1) , 名称
在查询中的"%s "被替换参数这允许您查看模式对于某些⼦集的数据库
sqlite > 架构%abc%
沿着这些同样的, ⽽"表"命令也接受⼀个模式作为其第⼀个参数如果您给出参数设为表格命令, ⼀个"% "追加和instr 与LIKE ⼦句添加到查询这允许您仅列出这些表, 以匹配特定样式
"databases "命令显⽰了所有在当前连接打开的数据库总是⾄少有2第⼀个为"main ", 则原始数据库中打开第⼆个是"temp ", 该数据库⽤于临时表可能还有其他数据库中列出的数据库附加使⽤ATTACH 语句第
⼀个输出列是附加到的名称, 第⼆个列是外部⽂件的⽂件名sqlite > 数据库
将整个数据库转换为⼀个ASCII ⽂本的⽂件
使⽤"转储命令将整个数据库的内容复制到单个ASCII ⽂本⽂件该⽂件可以转换回数据库的管道其返回到sqlite3 .
请在存档复制⼀个很好的⽅式与此数据库:
$echo ''转储"| sqlite3 ex1 | gzip -c> ex1转储gz
这⽣成⼀个名为ex1转储gz包含createbackup 所需要的⼀切东西的数据库, 或另⼀个机器上createbackup数据库时, 只需输⼊:
$zcat ex1转储gz| sqlite3 ex2
⽂字格式为纯SQL 因此, 您还可以使⽤转储命令将导出到在应⽤程序配置中设置的SQLite 数据库到其他常⽤的SQL 数据库引擎像这样:
$数据库集ex2
$sqlite3 ex1转储| psql ex2
其他点命令
"解释"点可以使⽤下⾯的命令将输出模式设置为"column "并设置列宽设置为合理的每个值都在⼀个EXPLAIN 命令的输出EXPLAIN命令是⼀个SQLite-specific SQL 扩展插件后台模式如果任何常规SQL scs 的EXPLAIN, 然后键⼊SQL 命令被解析, 但不执⾏虚拟机指令序列的条件时,将已被⽤于执⾏SQL 命令返回查询结果, 如下所⽰: 例如:
sqlite > 解释
sqlite > 解释tbl1 删除, 其中两个< 20 ;
addr opcode p1 p2 p3
---- ------------ ----- ----- -------------------------------------
0ListOpen 00
1打开01tbl1
2下⼀页0╟9
3〗字段01
4整数20 0
5ge 02
6键00
7ListWrite 00
8goto 02
9noop 00
10 ListRewind 00
11 ListRead 014
12 删除00
13 goto 011
14 ListClose 00
"超时"命令设定的时间sqlite3 程序将等待对⽂件的锁定来清除它正试图访问⼀个错误返回之前将超时的默认值零, 以便⽴即返回⼀个错误如果任何所需的数据库表或索引已被锁定
最后, 我们提及"退出"命令导致sqlite3 程序退出
使⽤sqlite3 在shell 脚本
使⽤sqlite3 在shell 脚本的⼀种⽅法是使⽤"echo "或""cat "来⽣成⼀个⽂件中的⼀系列命令然后调⽤的单元测试将从⽣成的命令⽂件的输⼊此依旧⽆法正常运⾏的是⼤多数情况下但作为附加的⽅便, sqlite3 允许单个SQL 命令在命令⾏输⼊的值为第⼆个参数在数据库的名称当启动sqlite3 程序时, 使⽤两个参数第⼆个参数将被传递到SQLite 库为处理在标准输出上打印查询的结果在列表中.模式和这种机制是专为帮助sqlite3 易于使⽤的程序, 如"awk "结合使⽤例如:
$sqlite3 ex1 '��elect *从tbl1 "|
> awk '{printf " < tr > < td > %s < td > %sn",$1,$2 }'
< tr > < td > hello < td > 10
< tr > < td > 再见< td > 20
$
结束shell 命令
SQLite 命令通常由分号终⽌在shell 也可以使⽤word "GO "(不区分⼤⼩写), 也可以是⼀个斜杠字符"/ "变得杂乱结束命令以下是由SQL server 和oracle , 值定义这些⽆法⼯作sqlite3_exec( )通过shell , 因为这些转换为⼀个分号传递到该功能之前
将sqlite3 编译程序从源
源代码到命令⾏sqlite3 接⼝中的单个名为"shell可以确定c"从SQLite ⽹站⾸先编译此⽂件(⼀起使⽤⽣成可执⾏⽂件例如: gcc -osqlite3 shellc sqlite3c -ldl -lpthread
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论