diff --git a/README.md b/README.md index 74e83f8ef8a..ca1bac732d5 100644 --- a/README.md +++ b/README.md @@ -231,6 +231,7 @@ Quick Reference [Redis](./docs/redis.md) [Elasticsearch](./docs/elasticsearch.md) [Neo4j](./docs/neo4j.md) +[SQLite](./docs/sqlite.md) ## 快捷键 diff --git a/assets/sqlite.svg b/assets/sqlite.svg new file mode 100644 index 00000000000..519885b0d44 --- /dev/null +++ b/assets/sqlite.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/sqlite.md b/docs/sqlite.md new file mode 100644 index 00000000000..76f20a63800 --- /dev/null +++ b/docs/sqlite.md @@ -0,0 +1,237 @@ +SQLite 备忘清单 +=== + +本备忘单旨在快速理解 [SQLite](https://sqlite.com/) 所涉及的主要概念,提供了最常用的SQL语句,供您参考。 + +入门 +--- + +### 介绍 + + +SQLite 是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。 + +SQLite遵守ACID,实现了大多数SQL标准。它使用动态的、弱类型的SQL语法。它作为嵌入式数据库,是应用程序,如网页浏览器,在本地/客户端存储数据的常见选择。它可能是最广泛部署的数据库引擎,因为它正在被一些流行的浏览器、操作系统、嵌入式系统所使用。同时,它有许多程序设计语言的语言绑定。 + +---- + +安装 +--- + +### 安装方式 + +- windows + + 从 [SQLite](https://www.sqlite.org/download.html) 下载 + + 您需要下载 `sqlite-tools-win32-*.zip` 和 `sqlite-dll-win32-*.zip` 压缩文件。 + + 创建文件夹 `C:\sqlite`,并在此文件夹下解压上面两个压缩文件,将得到 `sqlite3.def、sqlite3.dll` 和 `sqlite3.exe` 文件。 + + 添加 `C:\sqlite` 到 `PATH` 环境变量。 + +- linux + + linux 自带 `sqlite3`,或者通过 `apt-get/yum/brew` 等安装。 + +- macOS + + `brew install sqlite` 安装 + +操作 +--- + +### 连接数据库 + + **`SQLite` 通常不需要复杂的配置。创建数据库时,如果文件不存在,SQLite 会自动创建它。** + + ```bash + # 不存在则新建 + >sqlite3 mydatabase.db + ``` + +### 数据库操作 + +```shell +# 显示数据库名称及对应文件 +sqlite> .databases +main: /home/user/sqlite/database.db r/w + +# 显示已经设置的值 +sqlite> .show + echo: off + eqp: off + explain: auto + headers: off + mode: list + nullvalue: "" + output: stdout +colseparator: "|" +rowseparator: "\n" + stats: off + width: + filename: api.db + +# 以 sql 的形式 dump 数据库 +sqlite> .dump +PRAGMA foreign_keys=OFF; +BEGIN TRANSACTION; +CREATE TABLE api ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + host TEXT NOT NULL, + port INTEGER NOT NULL, + path TEXT NOT NULL +); +INSERT INTO api VALUES(1,'example.com',8080,'/api/v1'); + +# 备份数据库 +sqlite> .backup back + +# 备份单张表 +sqlite> .dump user + +# 退出 +sqlite> .exit +``` + +### 数据表操作 + +```sh +# 创建表 +sqlite> create table user(id integer primary key, name text); + +# 查看所有表 +sqlite> .tables + +# 查看表结构 +sqlite> .schema user + +# 导入文件到表中 +sqlite> .import user.csv user + +# 设置查询显示列名称 +sqlite> .head on + +``` + +### 输出模式设置 + +```sh +# 设置输出模式为 csv +sqlite> .mode csv +sqlite> select * from api; +id,host,port,path +1,example.com,8080,/api/v1 + +# 输出为 markdown +sqlite> select * from api; +| id | host | port | path | +|----|-----------------|------|---------| +| 1 | example.com | 8080 | /api/v1 | + +# 支持 ascii box column csv html insert json line list markdown qbox quote table tabs tcl 类型,省略展示 +``` + +### 支持 sql + +```sql +-- 常用 sql + +-- 创建表 +create table user(id integer primary key, name text); + +-- 删除表 +drop table user; + +-- 重命名表 +alter table user rename to user_new; + +-- 插入 +-- 单条 +insert into user(name) values('test'); +-- 多条 +insert into user(name) values('test1'),('test2'); + +-- 查询 +select * from user; +-- 去重查询 +select distinct name from user; +-- 统计 +select count(id) from user; +-- limit +select * from user limit 2; +-- 条件查询 +select * from user where id > 1; +-- 模糊查询 +select * from user where name like '%test%'; +-- group by +select name, count(id) from user group by name; +-- 排序 +select * from user order by id desc; +-- 聚合函数 +select max(id) from user; + +-- 更新 +update user set name='test3' where id=1; + +-- 删除 +delete from user where id=1; +``` + +### 事务支持 + +**事务**具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个标准属性,缩写为 ACID。 + +```sql +-- 开始事务 +begin transaction; +-- 操作 +update user set name='test4' where id=1; +-- 回滚 +rollback; +-- 提交 +commit; +``` + +### 命令行 + +`.help` + +|命令|描述| +|:---|:---| +|.backup ?DB? FILE |备份 DB 数据库(默认是 "main")到 FILE 文件。| +|.bail ON\|OFF |发生错误后停止。默认为 OFF。| +|.databases |列出数据库的名称及其所依附的文件。 +|.dump ?TABLE? |以 SQL 文本格式转储数据库。如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。 +|.echo ON\|OFF |开启或关闭 echo 命令。 +|.exit |退出 SQLite 提示符。 +|.explain ON\|OFF |开启或关闭适合于 EXPLAIN 的输出模式。如果没有带参数,则为 EXPLAIN on,即开启 EXPLAIN。 +|.header(s) ON\|OFF |开启或关闭头部显示。 +|.help |显示消息。 +|.import FILE TABLE |导入来自 FILE 文件的数据到 TABLE 表中。 +|.indices ?TABLE? |显示所有索引的名称。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。 +|.load FILE ?ENTRY? |加载一个扩展库。 +|.log FILE\|off |开启或关闭日志。FILE 文件可以是 stderr(标准错误)/stdout(标准输出)。 +|.nullvalue STRING |在 NULL 值的地方输出 STRING 字符串。 +|.output FILENAME |发送输出到 FILENAME 文件。 +|.output stdout |发送输出到屏幕。 +|.print STRING... |逐字地输出 STRING 字符串。 +|.prompt MAIN CONTINUE |替换标准提示符。 +|.quit |退出 SQLite 提示符。 +|.read FILENAME |执行 FILENAME 文件中的 SQL。 +|.schema ?TABLE? |显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。 +|.separator STRING |改变输出模式和 .import 所使用的分隔符。 +|.show |显示各种设置的当前值。 +|.stats ON\|OFF |开启或关闭统计。 +|.tables ?PATTERN? |列出匹配 LIKE 模式的表的名称。 +|.timeout MS |尝试打开锁定的表 MS 毫秒。 +|.width NUM |NUM 为 "column" 模式设置列宽度。 +|.timer ON\|OFF |开启或关闭 CPU 定时器。 +|.mode MODE | 设置输出模式,MODE 可以是下列之一:csv 逗号分隔的值
column 左对齐的列
html HTML 的 \ 代码
insert TABLE 表的 SQL 插入(insert)语句
line 每行一个值
list 由 .separator 字符串分隔的值
tabs 由 Tab 分隔的值
tcl TCL 列表元素
+ + +参考资料 +--- +- [百科](https://zh.wikipedia.org/wiki/SQLite) +- [SQLite](https://www.sqlite.org/) +- [菜鸟教程](https://www.runoob.com/sqlite/sqlite-tutorial.html) \ No newline at end of file