强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

SQLite 完全指南 / 02 - 安装与工具

02 - 安装与工具:各平台安装、命令行工具与 GUI 工具

2.1 各平台安装

2.1.1 macOS

# 方式一:Homebrew(推荐)
brew install sqlite3

# 方式二:MacPorts
sudo port install sqlite3

# 验证安装
sqlite3 --version
# 输出示例:3.46.0 2024-05-23 12:25:27 ...

# 查看安装路径
which sqlite3

💡 macOS 自带的 SQLite 版本通常较旧。建议通过 Homebrew 安装最新版本,并确保 PATH 中 Homebrew 路径优先。

2.1.2 Ubuntu / Debian

# 安装 SQLite3
sudo apt update
sudo apt install sqlite3

# 安装开发库(如需编译 C 程序)
sudo apt install libsqlite3-dev

# 验证
sqlite3 --version

2.1.3 CentOS / RHEL / Fedora

# CentOS/RHEL
sudo yum install sqlite sqlite-devel
# 或(较新版本)
sudo dnf install sqlite sqlite-devel

# Fedora
sudo dnf install sqlite sqlite-devel

2.1.4 Windows

方式步骤
官方下载访问 sqlite.org/download,下载 sqlite-tools-win-x64-*.zip
Scoopscoop install sqlite
Chocolateychoco install sqlite
wingetwinget install SQLite.SQLite
WSL在 WSL 中使用 sudo apt install sqlite3
# 使用 Scoop 安装(推荐)
scoop install sqlite

# 验证
sqlite3 --version

2.1.5 从源码编译

# 下载源码
wget https://sqlite.org/2024/sqlite-autoconf-3460000.tar.gz
tar xzf sqlite-autoconf-3460000.tar.gz
cd sqlite-autoconf-3460000

# 编译安装
./configure --prefix=/usr/local
make -j$(nproc)
sudo make install

# 验证
/usr/local/bin/sqlite3 --version

2.1.6 各平台安装方式速查

平台包管理器命令开发库
macOSHomebrewbrew install sqlite3已包含
macOSMacPortssudo port install sqlite3已包含
Ubuntu/Debianaptsudo apt install sqlite3libsqlite3-dev
CentOS/RHELyum/dnfsudo yum install sqlitesqlite-devel
Fedoradnfsudo dnf install sqlitesqlite-devel
Arch Linuxpacmansudo pacman -S sqlite已包含
WindowsScoopscoop install sqlite
WindowsChocolateychoco install sqlite
Alpine Linuxapkapk add sqlite sqlite-devsqlite-dev

2.2 SQLite 命令行工具(CLI)

SQLite CLI 是最核心的工具,功能丰富。

2.2.1 启动与基本操作

# 启动并创建/打开数据库
sqlite3 mydb.db

# 内存数据库(退出即销毁)
sqlite3 ":memory:"

# 以只读模式打开
sqlite3 -readonly mydb.db

# 以 JSON 输出模式启动
sqlite3 -json mydb.db

# 以列模式启动(更美观的输出)
sqlite3 -column mydb.db

# 执行单条 SQL 并退出
sqlite3 mydb.db "SELECT * FROM users;"

# 从文件执行 SQL
sqlite3 mydb.db < script.sql

2.2.2 常用点命令(Dot Commands)

SQLite CLI 的点命令是其强大之处:

命令说明示例
.tables列出所有表.tables
.schema TABLE显示表的 CREATE 语句.schema users
.fullschema显示完整的数据库 schema.fullschema
.indices TABLE显示表的索引.indices users
.databases列出所有已附加的数据库.databases
.mode MODE设置输出格式.mode column
.headers on/off显示/隐藏列名.headers on
.width C1 C2...设置列宽.width 15 30
.output FILE输出到文件.output result.txt
.import FILE TABLE导入 CSV 数据.import data.csv users
.dump导出整个数据库为 SQL.dump
.read FILE执行 SQL 文件.read script.sql
.backup FILE备份数据库.backup backup.db
.restore FILE恢复数据库.restore backup.db
.timer on/off开启/关闭查询计时.timer on
.explain设置 EXPLAIN 输出格式.explain
.quit退出.quit
.help显示帮助.help
.once FILE下一次查询结果输出到文件.once report.csv
.changes on/off显示受影响的行数.changes on
.nullvalue STR设置 NULL 的显示文本.nullvalue [NULL]
.print TEXT打印文本.print "Done!"

2.2.3 输出模式

SQLite CLI 支持多种输出模式:

-- 列模式(最常用)
.mode column
.headers on
SELECT id, name, email FROM users;

-- 输出示例:
-- id    name    email
-- ----  ------  ----------------
-- 1     张三    [email protected]
-- 2     李四    [email protected]

-- 表模式(带边框)
.mode table
SELECT id, name FROM users;

-- CSV 模式
.mode csv
SELECT * FROM users;

-- JSON 模式(SQLite 3.33.0+)
.mode json
SELECT * FROM users;

-- Markdown 模式
.mode markdown
SELECT * FROM users;

-- 制表符分隔
.mode tabs
SELECT * FROM users;

-- 插入语句模式(用于数据导出)
.mode insert users
SELECT * FROM users;

2.2.4 数据导入导出

# CSV 导入
sqlite3 mydb.db <<EOF
.mode csv
.import data.csv my_table
EOF

# 导出为 CSV
sqlite3 mydb.db <<EOF
.headers on
.mode csv
.output data.csv
SELECT * FROM my_table;
.output stdout
EOF

# 导出为 SQL(完整备份)
sqlite3 mydb.db ".dump" > backup.sql

# 从 SQL 恢复
sqlite3 newdb.db < backup.sql

# 导出为 JSON
sqlite3 -json mydb.db "SELECT * FROM users;" > users.json

2.2.5 实用技巧

# 查看数据库文件头信息(验证是否为合法 SQLite 文件)
sqlite3 mydb.db "SELECT * FROM sqlite_master LIMIT 1;"

# 查看数据库大小
sqlite3 mydb.db "SELECT page_count * page_size AS size FROM pragma_page_count(), pragma_page_size();"

# 批量执行多条 SQL
sqlite3 mydb.db <<EOF
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, val TEXT);
INSERT INTO test VALUES (1, 'hello');
INSERT INTO test VALUES (2, 'world');
COMMIT;
SELECT * FROM test;
EOF

# 管道操作:从其他命令导入
echo "SELECT 1+1 AS result;" | sqlite3
# 输出:2

2.3 GUI 图形工具

2.3.1 DB Browser for SQLite(推荐新手)

属性说明
平台Windows / macOS / Linux
许可证开源(GPL)
下载https://sqlitebrowser.org/
特点可视化建表、数据编辑、SQL 执行、导入导出

主要功能

  • 可视化创建和修改表结构
  • 直接在表格中浏览和编辑数据
  • 内置 SQL 编辑器,支持语法高亮
  • 导入/导出 CSV、SQL
  • 查看和编辑索引、视图、触发器

2.3.2 DBeaver(推荐高级用户)

属性说明
平台Windows / macOS / Linux
许可证社区版开源(Apache 2.0)
下载https://dbeaver.io/
特点支持多种数据库、ER 图、数据迁移

2.3.3 其他工具对比

工具平台免费特点
DB Browser for SQLite全平台简单直观,适合初学者
DBeaver全平台✅ 社区版功能全面,支持多种数据库
DataGrip全平台JetBrains 出品,功能强大
TablePlusmacOS/Windows部分界面优美,支持多种数据库
SQLiteStudio全平台轻量级,功能完整
sqlite3 CLI全平台官方命令行工具
VS Code 插件全平台SQLite Viewer / SQLite Explorer
Harlequin全平台终端 UI,现代美观

2.3.4 VS Code 插件

在 VS Code 中使用 SQLite:

  1. 安装 SQLite ViewerSQLite Explorer 插件
  2. 在文件资源管理器中点击 .db 文件即可浏览数据
  3. 或使用命令面板:Ctrl+Shift+PSQLite: Open Database

推荐插件:

插件名功能
SQLite Viewer只读浏览数据库
SQLite Explorer读写操作,支持 SQL 查询
SQLite3 Editor支持直接编辑数据

2.4 编程语言内置支持

许多语言内置了 SQLite 支持,无需额外安装驱动:

语言模块说明
Pythonsqlite3标准库内置
PHPPDO_SQLite, SQLite3默认启用
Rubysqlite3 gem需安装 gem
Godatabase/sql + go-sqlite3需 CGO
Rustrusqlite需安装 crate
Javasqlite-jdbc需添加依赖
Node.jsbetter-sqlite3需 npm 安装
# Python 内置 sqlite3 示例
import sqlite3

conn = sqlite3.connect(':memory:')
conn.execute('CREATE TABLE demo (id INTEGER PRIMARY KEY, name TEXT)')
conn.execute("INSERT INTO demo VALUES (1, 'Hello')")
for row in conn.execute('SELECT * FROM demo'):
    print(row)  # (1, 'Hello')
conn.close()

2.5 验证安装

安装完成后,执行以下命令验证:

# 1. 检查版本
sqlite3 --version

# 2. 检查编译选项
sqlite3 "" "PRAGMA compile_options;"

# 3. 检查关键特性
sqlite3 "" "SELECT json('{\"test\": 1}');"  # JSON 支持
sqlite3 "" "SELECT fts5();" 2>/dev/null || echo "FTS5 可用(通过 pragma 检查)"
sqlite3 "" "PRAGMA compile_options;" | grep -i "ENABLE_FTS5"  # FTS5 支持

# 4. 运行一个完整测试
sqlite3 /tmp/test.db <<EOF
CREATE TABLE test (id INTEGER PRIMARY KEY, val TEXT);
INSERT INTO test VALUES (1, '安装成功');
SELECT * FROM test;
DROP TABLE test;
.quit
EOF

⚠️ 注意事项

  1. macOS 自带版本可能过旧——/usr/bin/sqlite3 通常是系统自带版本,建议通过 Homebrew 安装新版本并调整 PATH
  2. Windows 下注意选择正确的下载包——需要 sqlite-tools(包含 sqlite3.exe),而非仅 sqlite-dll
  3. 编译时启用需要的特性——从源码编译时需要 CFLAGS 添加 -DSQLITE_ENABLE_FTS5
  4. GUI 工具可能会锁定数据库——DB Browser for SQLite 打开数据库时可能阻止其他程序写入
  5. .import 命令对 CSV 格式有严格要求——必须是标准 CSV,首行为列名

💡 技巧

  1. 快速创建临时测试数据库sqlite3 ":memory:" 创建内存数据库,退出即销毁
  2. 一行命令查看表结构sqlite3 db.sqlite ".schema users"
  3. 使用 .read 执行复杂脚本:将 SQL 语句保存到 .sql 文件后批量执行
  4. JSON 输出模式非常有用sqlite3 -json db.sqlite "SELECT * FROM t;" 可直接对接 JSON 管道
  5. 结合 jq 做数据处理sqlite3 -json db.sqlite "SELECT * FROM users;" | jq '.[].name'

📌 业务场景

场景一:新项目快速原型

你正在快速搭建一个 MVP 原型,不想花时间安装配置 PostgreSQL。使用 sqlite3 :memory: 配合 Python 即可在几秒内开始开发。

场景二:数据迁移与检查

收到了一个 .db 文件需要检查数据。使用 DB Browser for SQLite 可以直观地浏览数据,或用 CLI 快速导出为 CSV 进行分析。

场景三:CI/CD 中的数据库测试

在 GitHub Actions 中运行数据库相关测试。SQLite 无需额外服务,直接使用 sqlite3 :memory: 即可。

场景四:数据分析

拿到一个 SQLite 格式的数据集(如 GitHub 的 GH Archive),使用 CLI 或 GUI 工具直接查询分析。


🔗 扩展阅读


📖 下一章03 - 架构原理 —— SQLite 内部架构:虚拟机、B-Tree、WAL、页面缓存