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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dropdownlist赋值_paypal可以绑定什么卡

    dropdownlist赋值_paypal可以绑定什么卡很多的时候需要把枚举作为数据源绑定DropDownList,一直简单的做法是: 1    /**////  2    /// 排序方向下拉列表,从DropDownList继承 3    ///  4    public class SortOrderDropDownList : DropDownList 5    { 6        public SortOrderDropDownList(

    2022年10月8日
    4
  • 动态规划之背包问题及输出背包具体方案[通俗易懂]

    动态规划之背包问题及输出背包具体方案[通俗易懂]题型1:LintCode92.背包问题题目:在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]。分析:dp[i][j]:当背包总重量为j且目前有i个物品时,背包最多装满dp[i][j]的空间。      状态转移方程为:dp[i][j]=max{dp[i-1][j-A[i-1]]+A[i-1],dp[i-1][j]},其中dp[i-1][j-A[…

    2022年7月26日
    12
  • 李洪强和你一起学习前端之(4)HTML5介绍

    李洪强和你一起学习前端之(4)HTML5介绍

    2022年3月1日
    69
  • 如何在pycharm中安装第三方库_pycharm使用pip安装pygame

    如何在pycharm中安装第三方库_pycharm使用pip安装pygame一、场景描述:在开发python小游戏前,需要安装pygame的插件,如何在pycharm软件中安装pygame的插件呢,本文将重点讲解如何安装pygame这个插件。二、安装步骤:1、在pycharm软件中定位到file–settings2、定位到:project(自己的项目中)–pythoninterpreter,选择右边的pip3、双击pip,进入查询插件界面,输入pygame,进行查询这个插件,最后点击installpackage4、安装成功后,会在pycharm软件的下方提示安

    2022年8月26日
    6
  • CTFHUB——反射型XSS详解「建议收藏」

    CTFHUB——反射型XSS详解「建议收藏」背景本来看ctfhub上有xss的题目,打算好好学习一波,结果点开一看,只有一道题2333。便现在dvwa上熟悉了一波。所谓反射型是相对于存储型来讲的。如果黑客的xss注入是通过某种方式储存到了数据库中,那就是存储型的,这种xss的特点就是每次访问该页面都会收到xss攻击,因为js语句已经放在数据库里了。而反射型xss则不是这样,每次触发只能手动输入和点击才能触发。我认为xss产生的原因主要是对便签审查不严格造成的。dvwaxss例题下面写一下dvwa中的三种难度的反射型xss。<?

    2022年5月9日
    60
  • cnpm安装教程_安装命令提示符

    cnpm安装教程_安装命令提示符1、确认npm是否安装成功:win+R,输入cmd,打开命令窗口2、命令行窗口输入:node-v,显示有版本号,则安装成功3、安装cnpm:输入npminstall-gcnpm-registry=https://registry.npm.taobao.org4、安装完成后,输入cmpm-v,检查是否安装成功如果出现cnpm不是内部或者外部命令提示,请继续以下操作5、配置环境变量打开系统环境变量,增加如下配置,则修改成功回到命令行窗口输入cn..

    2022年10月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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