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 |
| Scoop | scoop install sqlite |
| Chocolatey | choco install sqlite |
| winget | winget 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 各平台安装方式速查
| 平台 | 包管理器 | 命令 | 开发库 |
|---|---|---|---|
| macOS | Homebrew | brew install sqlite3 | 已包含 |
| macOS | MacPorts | sudo port install sqlite3 | 已包含 |
| Ubuntu/Debian | apt | sudo apt install sqlite3 | libsqlite3-dev |
| CentOS/RHEL | yum/dnf | sudo yum install sqlite | sqlite-devel |
| Fedora | dnf | sudo dnf install sqlite | sqlite-devel |
| Arch Linux | pacman | sudo pacman -S sqlite | 已包含 |
| Windows | Scoop | scoop install sqlite | — |
| Windows | Chocolatey | choco install sqlite | — |
| Alpine Linux | apk | apk add sqlite sqlite-dev | sqlite-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 张三 zhangsan@mail.com
-- 2 李四 lisi@mail.com
-- 表模式(带边框)
.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 出品,功能强大 |
| TablePlus | macOS/Windows | 部分 | 界面优美,支持多种数据库 |
| SQLiteStudio | 全平台 | ✅ | 轻量级,功能完整 |
| sqlite3 CLI | 全平台 | ✅ | 官方命令行工具 |
| VS Code 插件 | 全平台 | ✅ | SQLite Viewer / SQLite Explorer |
| Harlequin | 全平台 | ✅ | 终端 UI,现代美观 |
2.3.4 VS Code 插件
在 VS Code 中使用 SQLite:
- 安装 SQLite Viewer 或 SQLite Explorer 插件
- 在文件资源管理器中点击
.db文件即可浏览数据 - 或使用命令面板:
Ctrl+Shift+P→SQLite: Open Database
推荐插件:
| 插件名 | 功能 |
|---|---|
| SQLite Viewer | 只读浏览数据库 |
| SQLite Explorer | 读写操作,支持 SQL 查询 |
| SQLite3 Editor | 支持直接编辑数据 |
2.4 编程语言内置支持
许多语言内置了 SQLite 支持,无需额外安装驱动:
| 语言 | 模块 | 说明 |
|---|---|---|
| Python | sqlite3 | 标准库内置 |
| PHP | PDO_SQLite, SQLite3 | 默认启用 |
| Ruby | sqlite3 gem | 需安装 gem |
| Go | database/sql + go-sqlite3 | 需 CGO |
| Rust | rusqlite | 需安装 crate |
| Java | sqlite-jdbc | 需添加依赖 |
| Node.js | better-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
⚠️ 注意事项
- macOS 自带版本可能过旧——
/usr/bin/sqlite3通常是系统自带版本,建议通过 Homebrew 安装新版本并调整 PATH - Windows 下注意选择正确的下载包——需要
sqlite-tools(包含 sqlite3.exe),而非仅sqlite-dll - 编译时启用需要的特性——从源码编译时需要
CFLAGS添加-DSQLITE_ENABLE_FTS5等 - GUI 工具可能会锁定数据库——DB Browser for SQLite 打开数据库时可能阻止其他程序写入
.import命令对 CSV 格式有严格要求——必须是标准 CSV,首行为列名
💡 技巧
- 快速创建临时测试数据库:
sqlite3 ":memory:"创建内存数据库,退出即销毁 - 一行命令查看表结构:
sqlite3 db.sqlite ".schema users" - 使用
.read执行复杂脚本:将 SQL 语句保存到.sql文件后批量执行 - JSON 输出模式非常有用:
sqlite3 -json db.sqlite "SELECT * FROM t;"可直接对接 JSON 管道 - 结合
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、页面缓存