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事务
开源免费 公有领域许可

最佳适用场景 #

  1. 移动应用本地存储
  2. 桌面应用数据管理
  3. 嵌入式设备数据存储
  4. 小型网站和博客
  5. 开发测试环境
  6. 本地数据缓存

下一步,让我们学习如何安装和配置SQLite!

最后更新:2026-03-27