SQLite简介 #
一、什么是SQLite #
1.1 SQLite概述 #
SQLite 是一个轻量级的嵌入式关系数据库管理系统,由 D. Richard Hipp 于2000年创建。它是目前世界上最广泛部署的数据库引擎,被应用于数十亿设备和应用程序中。
sql
-- SQLite 的核心特点
-- 1. 无服务器架构
-- 2. 单文件存储
-- 3. 零配置
-- 4. 事务支持
1.2 发展历史 #
| 时间 | 里程碑 |
|---|---|
| 2000年 | SQLite 1.0 发布 |
| 2001年 | SQLite 2.0 发布,引入类型系统 |
| 2004年 | SQLite 3.0 发布,支持 UTF-8/UTF-16 |
| 2005年 | 添加全文搜索支持 |
| 2007年 | iPhone 使用 SQLite |
| 2010年 | Android 内置 SQLite |
| 2014年 | JSON1 扩展发布 |
| 2016年 | FTS5 全文搜索发布 |
| 2018年 | 窗口函数支持 |
| 2021年 | JSON 函数内置 |
| 2024年 | SQLite 3.45 发布 |
1.3 SQLite架构 #
text
┌─────────────────────────────────────────┐
│ 应用程序 │
├─────────────────────────────────────────┤
│ SQL接口 │
│ (sqlite3_prepare, sqlite3_exec...) │
├─────────────────────────────────────────┤
│ SQL编译器 │
│ (词法分析、语法分析、代码生成) │
├─────────────────────────────────────────┤
│ 虚拟机 │
│ (VDBE - 虚拟数据库引擎) │
├─────────────────────────────────────────┤
│ B-Tree存储引擎 │
├─────────────────────────────────────────┤
│ 页面缓存 │
├─────────────────────────────────────────┤
│ 操作系统接口 │
│ (文件系统、内存管理) │
└─────────────────────────────────────────┘
二、核心特点 #
2.1 无服务器架构 #
sql
-- 传统数据库架构
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 客户端 │────→│ 服务器 │────→│ 数据库 │
└──────────┘ └──────────┘ └──────────┘
-- SQLite架构
┌──────────┐ ┌──────────┐
│ 应用程序 │────→│ 数据库文件│
└──────────┘ └──────────┘
优势:
- 无需安装和配置数据库服务器
- 无需维护服务器进程
- 无需网络连接
- 简化部署流程
2.2 单文件存储 #
sql
-- SQLite数据库就是一个文件
myapp.db -- 整个数据库存储在这个文件中
-- 包含内容:
-- 1. 表结构定义
-- 2. 数据记录
-- 3. 索引
-- 4. 触发器
-- 5. 视图
优势:
- 易于备份和迁移
- 文件系统级别的复制
- 跨平台兼容
- 版本控制友好
2.3 零配置 #
bash
# 无需配置文件
# 无需启动服务
# 无需创建用户
# 直接使用
sqlite3 myapp.db
2.4 完整的事务支持 #
sql
-- SQLite 支持完整的 ACID 事务
BEGIN TRANSACTION;
INSERT INTO accounts (user_id, balance) VALUES (1, 1000);
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT;
-- 或 ROLLBACK;
2.5 跨平台支持 #
| 平台 | 支持 |
|---|---|
| Windows | ✓ |
| macOS | ✓ |
| Linux | ✓ |
| iOS | ✓ |
| Android | ✓ |
| 嵌入式系统 | ✓ |
三、SQLite的优势 #
3.1 轻量级 #
sql
-- SQLite 库大小
-- 完整版:约 500KB - 1MB
-- 最小版:约 250KB
-- 对比其他数据库
-- MySQL:约 200MB+
-- PostgreSQL:约 300MB+
3.2 高可靠性 #
sql
-- SQLite 经过严格测试
-- 100% 分支测试覆盖率
-- 数十亿次测试用例执行
-- 数据库文件格式稳定
-- 向后兼容性保证
3.3 高性能 #
sql
-- 对于小型到中型数据集
-- SQLite 通常比客户端/服务器数据库更快
-- 原因:
-- 1. 无网络开销
-- 2. 无进程间通信
-- 3. 无权限检查开销
3.4 公有领域许可 #
sql
-- SQLite 是公有领域软件
-- 无版权限制
-- 可用于任何目的
-- 无需支付许可费用
-- 无需开源代码
四、应用场景 #
4.1 移动应用 #
sql
-- iOS 应用
-- CoreData 底层使用 SQLite
-- 直接使用 SQLite
-- Android 应用
-- 内置 SQLite 支持
-- Room 底层使用 SQLite
-- 示例:本地数据存储
CREATE TABLE user_settings (
key TEXT PRIMARY KEY,
value TEXT,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
4.2 桌面应用 #
sql
-- 应用程序配置存储
CREATE TABLE app_config (
id INTEGER PRIMARY KEY,
section TEXT,
key TEXT,
value TEXT,
UNIQUE(section, key)
);
-- 本地缓存
CREATE TABLE cache (
key TEXT PRIMARY KEY,
value BLOB,
expires_at DATETIME
);
4.3 嵌入式设备 #
sql
-- IoT 设备数据存储
CREATE TABLE sensor_data (
id INTEGER PRIMARY KEY,
sensor_id TEXT,
value REAL,
recorded_at DATETIME
);
-- 创建索引优化查询
CREATE INDEX idx_sensor_time ON sensor_data(sensor_id, recorded_at);
4.4 网站和Web应用 #
sql
-- 小型网站
-- 日流量 < 100,000 的网站
-- 静态网站生成器
-- 内容存储在 SQLite
-- 开发和测试环境
-- 快速原型开发
4.5 数据分析 #
sql
-- 本地数据分析
-- CSV 导入 SQLite
.mode csv
.import data.csv mytable
-- 使用 SQL 分析数据
SELECT
category,
COUNT(*) as count,
AVG(value) as avg_value
FROM mytable
GROUP BY category;
五、SQLite的限制 #
5.1 并发限制 #
sql
-- SQLite 支持多读者,但只支持单写者
-- 读并发:多个进程可同时读取
-- 写并发:同一时间只能有一个写入者
-- 解决方案:
-- 1. 使用 WAL 模式提高并发
PRAGMA journal_mode = WAL;
-- 2. 短事务减少锁持有时间
BEGIN IMMEDIATE;
-- 快速操作
COMMIT;
5.2 网络访问 #
sql
-- SQLite 不支持直接网络访问
-- 数据库文件必须在本地文件系统
-- 变通方案:
-- 1. 网络文件系统(不推荐)
-- 2. 定期同步
-- 3. 使用 SQLite 作为本地缓存
5.3 数据库大小 #
sql
-- 理论最大:140TB
-- 实际建议:< 1TB
-- 大文件考虑:
-- 1. 备份时间
-- 2. 文件系统限制
-- 3. 查询性能
5.4 用户管理 #
sql
-- SQLite 没有内置用户管理系统
-- 没有用户名/密码
-- 没有权限控制
-- 安全依赖:
-- 1. 文件系统权限
-- 2. 应用层控制
-- 3. 加密扩展(SQLCipher)
六、SQLite与其他数据库对比 #
6.1 对比MySQL #
| 特性 | SQLite | MySQL |
|---|---|---|
| 架构 | 嵌入式 | 客户端/服务器 |
| 配置 | 零配置 | 需要配置 |
| 用户管理 | 无 | 完善 |
| 并发写入 | 单写者 | 多写者 |
| 存储过程 | 不支持 | 支持 |
| 部署难度 | 极低 | 中等 |
| 适用场景 | 嵌入式、移动 | Web应用 |
6.2 对比PostgreSQL #
| 特性 | SQLite | PostgreSQL |
|---|---|---|
| 架构 | 嵌入式 | 客户端/服务器 |
| 数据类型 | 动态类型 | 静态类型 |
| JSON支持 | 扩展支持 | 原生支持 |
| 全文搜索 | FTS扩展 | 内置 |
| 窗口函数 | 支持 | 支持 |
| 适用场景 | 小型应用 | 企业应用 |
6.3 选择建议 #
text
选择 SQLite 的场景:
├── 移动应用
├── 桌面应用
├── 嵌入式设备
├── 小型网站
├── 开发测试
└── 本地缓存
选择 MySQL/PostgreSQL 的场景:
├── 大型Web应用
├── 高并发写入
├── 需要用户权限管理
├── 需要存储过程
└── 分布式系统
七、SQLite生态系统 #
7.1 编程语言支持 #
| 语言 | 库/驱动 |
|---|---|
| Python | sqlite3(内置) |
| Java | JDBC, SQLite-JDBC |
| C/C++ | SQLite C API |
| JavaScript | better-sqlite3, sql.js |
| Go | go-sqlite3 |
| Rust | rusqlite |
| PHP | PDO SQLite |
| Ruby | sqlite3 gem |
7.2 管理工具 #
| 工具 | 类型 | 说明 |
|---|---|---|
| sqlite3 | 命令行 | 官方CLI工具 |
| DB Browser for SQLite | GUI | 跨平台可视化工具 |
| SQLiteStudio | GUI | 功能丰富的GUI工具 |
| DBeaver | GUI | 通用数据库工具 |
| TablePlus | GUI | 现代化数据库工具 |
7.3 扩展 #
| 扩展 | 功能 |
|---|---|
| FTS3/FTS4/FTS5 | 全文搜索 |
| JSON1 | JSON函数 |
| R*Tree | 空间索引 |
| SQLCipher | 加密支持 |
| SpatiaLite | 空间数据支持 |
八、版本特性 #
8.1 SQLite 3.x 主要特性 #
sql
-- SQLite 3.0 (2004)
-- UTF-8 和 UTF-16 支持
-- BLOB 支持
-- 新的文件格式
-- SQLite 3.7 (2010)
-- WAL 模式
-- 外键约束
-- SQLite 3.25 (2018)
-- 窗口函数
-- SQLite 3.35 (2021)
-- 内置 JSON 函数
-- RETURNING 子句
-- SQLite 3.39 (2022)
-- RIGHT JOIN 和 FULL JOIN
-- SQLite 3.45 (2024)
-- 增强的 JSON 函数
8.2 检查版本 #
sql
-- SQL 方式
SELECT sqlite_version();
-- 命令行方式
sqlite3 --version
九、总结 #
SQLite 核心特点 #
| 特点 | 说明 |
|---|---|
| 无服务器 | 无需单独的服务器进程 |
| 零配置 | 无需安装和配置 |
| 单文件 | 整个数据库在一个文件中 |
| 跨平台 | 支持所有主流操作系统 |
| 事务支持 | 完整的ACID事务 |
| 开源免费 | 公有领域许可 |
最佳适用场景 #
- 移动应用本地存储
- 桌面应用数据管理
- 嵌入式设备数据存储
- 小型网站和博客
- 开发测试环境
- 本地数据缓存
下一步,让我们学习如何安装和配置SQLite!
最后更新:2026-03-27