Sqlite #1 命令行工具sqlite3

Sqlite #1 命令行工具sqlite3

SQLite是一个嵌入式关系型数据库引擎,没有服务器。引擎文件非常小,数据库文件可以跨平台、跨架构地移植。

相关概念[^1]

关系型数据库

关系型数据库(relational database)通过表(table)来组织数据,表之间存在关系(relations)。SQL是管理关系型数据库中数据的语言。数据库系统的模式通过SQL来描述,模式定义了表(tables), 字段(fields), 关系(relationships), 视图(views), 索引(indexes), 处理过程(processes), 函数(functions), 队列(queues), 触发器(triggers)和其他元素。

表包含水平的行(rows)和竖直的列(columns),每行代表表中的一条结构化数据,也叫记录;每列是某种特定类型的数据。行和列交汇的是一个字段(field)。

视图(views)是对单表或多表中的数据进行的特定整合,本质上是一个查询结果得到的虚拟表。

索引(indexes)是种数据结构,可以提高查询的速度。

关系

主键(primary key)唯一标识表中的每行记录,外键(foreign key)是表之间的引用约束(referential constraint), 外键定义了一个表中一列或多列与其他表中的一列或多列间的引用关系。

存储过程

触发器(triggers)是一组过程代码,可以响应特定表中的事件而自动执行。

事务(transaction)是数据库操作的原子单元,事务中的代码如果全部成功就会提交给数据库,如果出现失败就会回滚。

查询

结果集(result set)是SELECT语句从数据库查询得到的一组数据行。

sqlite3命令行工具

查看sqlite3命令选项

$ sqlite3 --help                                                        ✘
Usage: sqlite3 [OPTIONS] FILENAME [SQL]
FILENAME is the name of an SQLite database. A new database is created
if the file does not previously exist.
OPTIONS include:
   -bail                stop after hitting an error
   -batch               force batch I/O
   -column              set output mode to 'column'
   -cmd COMMAND         run "COMMAND" before reading stdin
   -csv                 set output mode to 'csv'
   -echo                print commands before execution
   -init FILENAME       read/process named file
   -[no]header          turn headers on or off
   -help                show this message
   -html                set output mode to HTML
   -interactive         force interactive I/O
   -line                set output mode to 'line'
   -list                set output mode to 'list'
   -mmap N              default mmap size set to N
   -nullvalue TEXT      set text string for NULL values. Default ''
   -separator SEP       set output field separator. Default: '|'
   -stats               print memory stats before each finalize
   -version             show SQLite version
   -vfs NAME            use NAME as the default VFS

这些参数基本与交互式上下文的命令一致。

如果只需执行几条语句,可以直接通过sqlite3命令来执行,不必进入交互式上下文。比如备份表

$ sqlite3 ppurl.db3 ".dump books" > books_bak.sql
$ sqlite3 ppurl.db3 < books_bak.sql

创建数据库

$ sqlite3 ppurl.db3

如果ppurl.db3不存在就会被创建,如果存在就会打开数据库; 然后就会进入sqlite3的交互式上下文。

查看元信息

进入sqlite3交互式上下文后,可以通过.help查看所有命令,sqlite3的命令都是以句点开头的,退出使用.quit/.exit/.q

.databases/.database查看数据库

sqlite> .databases
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             /Users/dou/ws/py/db/ppurl/ppurl.db3

.tables/.table列出所有表和视图

sqlite> .tables
books

.indices查看索引 .schema查看模式

 sqlite> .schema books
CREATE TABLE books(id integer primary key autoincrement, name varchar(255), link text);
-- sqlite其实不用声明字段的类型,因为可以存储任意类型的数据,sqlite会自动调整

SELECT查询表

SELECT语句要以分号结尾,--表示注释

sqlite> select * from books;

结果太多,可以limit指定记录数

 sqlite> select * from books limit 1;
1|使用Perl实现系统管理自动化(第二版)(ZIP卷2).pdf|ed2k://|file|%E4%BD%BF%E7%94%A8Perl%E5%AE%9E%E7%8E%B0%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E8%87%AA%E5%8A%A8%E5%8C%96%28%E7%AC%AC%E4%BA%8C%E7%89%88%29%28ZIP%E5%8D%B72%29.pdf|39561391|aa1bf37d2fc514832f01e212ce54761a|h=xb7y34a2wtnmnmvpcov764xx33l7qgy2|/

默认情况下使用|分隔字段,并且没有打印表头

.show查看默认设置

sqlite> .show
     echo: off
      eqp: off
  explain: off
  headers: off
     mode: list
nullvalue: ""
   output: stdout
separator: "|"
    stats: off
    width:

.separator更改分隔符

sqlite> .separator "\r\n"

.headers/.header打开表头开关

sqlite> .headers on

.width设置每列宽度

sqlite> .width 4 10 50

.width只有在column多列模式下才有作用

.mode结果显示模式

sqlite> .mode
Error: mode should be one of: column csv html insert line list tabs tcl

column姿势

id  name
--  -------------------------------------------------------------
1   使用Perl实现系统管理自动化(第二版)(ZIP卷2).pdf

csv姿势

id,name
1,"使用Perl实现系统管理自动化(第二版)(ZIP卷2).pdf"

html

<TR><TH>id</TH>
<TH>name</TH>
</TR>
<TR><TD>1</TD>
<TD>使用Perl实现系统管理自动化(第二版)(ZIP卷2).pdf</TD>
</TR>

insert

INSERT INTO table VALUES(1,'使用Perl实现系统管理自动化(第二版)(ZIP卷2).pdf');

line

 id = 1
 name = 使用Perl实现系统管理自动化(第二版)(ZIP卷2).pdf

list

id|name
1|使用Perl实现系统管理自动化(第二版)(ZIP卷2).pdf
-- csv, tabs会更改separator, 所以如果分隔符是逗点或者制表符不要惊奇

tabs

id    name
1    使用Perl实现系统管理自动化(第二版)(ZIP卷2).pdf

tcl

"id" "name"
"1" "使�\224�Perl�\236�\216�系�\237管�\220\206�\207��\212��\214\226(第�\214�\211\210)(ZIP�\215�2).pdf"
-- 这个乱码的原因有点诡异

导入导出数据

.dump导出表

sqlite> .dump books

默认输出到标准输出(.show列出的output查看输出位置)

.output更改输出位置

sqlite> .output books.sql

这里注意,.output会把所有输出重定向到books.sql,所以导出表之后,要把输出改回来。另外输出重定向是追加模式,所以导出表前,最好不要敲其他命令。对配置的更改不是全局的,下次进入交互式上下文时,所有设置都是默认的。

.read导入表

sqlite> .read books.sql

.import从文件导入数据到表

这样可以恢复表

.save保存内存数据库到文件

sqlite>.save in-memory.db3

sqlite>.shell ls -l *.db3
-rw-r--r--  1 dou  staff  2760704  2  1 15:47 in-memory.db3
-rw-r--r--  1 dou  staff  2760704  1 31 23:37 ppurl.db3
-- 可以看到两个数据库大小一样

.restore从文件恢复数据库 .open打开其他数据库

sqlite>.open in-memory.db3
-- .open会关闭当前数据库

.clone数据库

sqlite>.clone books_clone.db3

其他语句

运行shell命令

在交互式上下文中不想退出去敲各种shell命令,可以使用.shell,.system

sqlite> .system ls -l
sqlite> .shell ls -l

更改提示符

如果觉得sqlite>这种提示符不爽,可以用.prompt修改

sqlite>.prompt books>
books>

[1] http://zetcode.com/db/sqlite/introduction/

转载于:https://my.oschina.net/douxingxiang/blog/374160

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109563.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Alex 的 Hadoop 菜鸟教程: 第1课 hadoop体系介绍

    Alex 的 Hadoop 菜鸟教程: 第1课 hadoop体系介绍介绍hadoop的体系,对hadoop庞大的生态圈进行了介绍,并标出了学习的优先级。简单明了的介绍,看了不晕

  • apache的安装与配置_apache2.4安装教程

    apache的安装与配置_apache2.4安装教程准备安装包到https://www.apachelounge.com/download/下载你需要的Apache安装包(注意需要相应的VC运行库)解压文件到指定安装目录3.替换安装路径使用文本编辑器打开Apache的配置文件conf/httpd.conf执行文本替换将”c:/Apache24”全部替换成(你自己解压的路径)“G:\web\apache2.4”4

  • 【转载】究竟啥才是互联网架构“高可用”

    【转载】究竟啥才是互联网架构“高可用”

    2021年11月20日
  • Gamma 校正_gamma校正什么意思

    Gamma 校正_gamma校正什么意思问题:什么是Gamma曲线矫正?Gamma曲线矫正是什么意思?      Gamma曲线是一种特殊的色调曲线,当Gamma值等于1的时候,曲线为与坐标轴成45°的直线,这个时候表示输入和输出密度相同。高于1的Gamma值将会造成输出亮化,低于1的Gamma值将会造成输出暗化。总之,我们的要求是输入和输出比率尽可能地接近于1。在显示器、扫描仪、打印机等输入、输出设备中这是一个相当常见并且比较重

  • IIC通信协议总结[通俗易懂]

    IIC通信协议总结[通俗易懂](1)概述I2C(Inter-IntegratedCircuit BUS)集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。经常IIC和SPI接口被认为指定是一种硬件设备,但其实这样的说法是不尽准确的,严格的说他们都是人们所定义的软硬结合体,分为物理层(四线结构)和协议层(主机,从

  • android之layout布局和ListView中的一些属性介绍[通俗易懂]

    一.android:singleLine设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用“…”来表示。如android:text=”test_ singleLine “android:singleLine=”true”android:layout_width=”20dp”将只显示”t…”如果不设置singleLine或者设置为false

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号