reference/docs/sqlite.md
2024-11-06 07:17:03 +08:00

6.7 KiB
Raw Blame History

SQLite 备忘清单

本备忘单旨在快速理解 SQLite 所涉及的主要概念提供了最常用的SQL语句供您参考。

入门

介绍

SQLite 是遵守ACID的关系数据库管理系统它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。

SQLite遵守ACID实现了大多数SQL标准。它使用动态的、弱类型的SQL语法。它作为嵌入式数据库是应用程序如网页浏览器在本地/客户端存储数据的常见选择。它可能是最广泛部署的数据库引擎,因为它正在被一些流行的浏览器、操作系统、嵌入式系统所使用。同时,它有许多程序设计语言的语言绑定。


安装

安装方式

  • windows

    SQLite 下载

    您需要下载 sqlite-tools-win32-*.zipsqlite-dll-win32-*.zip 压缩文件。

    创建文件夹 C:\sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dllsqlite3.exe 文件。

    添加 C:\sqlitePATH 环境变量。

  • linux

    linux 自带 sqlite3,或者通过 apt-get/yum/brew 等安装。

  • macOS

    brew install sqlite 安装

操作

连接数据库

SQLite 通常不需要复杂的配置。创建数据库时如果文件不存在SQLite 会自动创建它。

# 不存在则新建
>sqlite3 mydatabase.db

数据库操作

# 显示数据库名称及对应文件
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

数据表操作

# 创建表
sqlite> create table user(id integer primary key, name text);

# 查看所有表
sqlite> .tables

# 查看表结构
sqlite> .schema user

# 导入文件到表中
sqlite> .import user.csv user

# 设置查询显示列名称
sqlite> .head on

输出模式设置

# 设置输出模式为 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

-- 创建表
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。

-- 开始事务
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 的 <table> 代码
insert TABLE 表的 SQL 插入insert语句
line 每行一个值
list 由 .separator 字符串分隔的值
tabs 由 Tab 分隔的值
tcl TCL 列表元素

参考资料