文章目录
SQLite01-入门
1、简介
(1)数据库基础
(2)介绍
- 官网地址:https://www.sqlite.org/
- 源码地址:https://github.com/sqlite/sqlite
- SQLite 是一个轻量级、嵌入式、无服务器的关系型数据库引擎,以 C 语言库的形式实现。它将整个数据库(包括表、索引和数据)存储在单个磁盘文件中,无需独立服务进程
(3)核心特点
- 零配置:无需安装或管理后台服务,直接访问磁盘文件即可使用。
- 跨平台兼容:支持 Windows、Linux、macOS、Android、iOS 等系统。
- 轻量高效:库文件体积小(可低于 600KB),内存占用低,适合资源受限环境。
- ACID 事务支持:确保数据的原子性、一致性、隔离性和持久性。
- 开源免费:代码属于公共领域,可商用且无授权限制。
(4)典型应用场景
- 嵌入式设备:工业控制器、医疗仪器等,依赖其低资源消耗和独立性。
- 移动应用:Android/iOS 默认集成,用于本地存储(如用户配置、缓存)。
- 桌面软件:替代文件操作(如
fopen()),管理小型数据。 - 小型 Web 应用:个人博客或低频访问系统,简化部署。
(5)局限性
- 并发性能弱:基于文件锁机制,高并发写入时效率较低。
- 功能精简:
- 不支持
FULL OUTER JOIN、ALTER TABLE DROP COLUMN等高级 SQL 语法。 - 视图只读,不可通过视图修改数据。
- 不支持
- 存储容量上限:单库理论支持 2TB,但超大规模数据性能受限。
(6)开发支持
- 多语言接口:提供 C/C++、Python、Java、PHP 等 API。
- 命令行工具:内置 CLI 客户端,支持直接执行 SQL 管理。
2、发展历程
(1)诞生背景(1999-2000年)
- 灵感来源
SQLite的创始人D. Richard Hipp在参与美国海军导弹驱逐舰项目时,发现传统数据库(如Informix)在嵌入式场景中过于臃肿,安装和维护成本高昂。这促使他设计一个轻量级、无服务器的数据库解决方案。 - 初版发布
2000年8月,SQLite 1.0正式发布,采用GNU数据库管理器(GDBM)作为初始存储引擎,核心目标是实现零配置、单文件存储。其名称"SQLite"既指轻量化(Light),也暗含与创始人女儿"My"的关联。
(2)技术突破期(2000-2004年)
- 架构革新(V2-V3版本)
- 2001年V2版:支持多线程并发,但稳定性不足。
- 2004年V3版:彻底重构B-Tree存储引擎,引入ACID事务支持和跨平台兼容性,性能提升10倍以上,支持TB级数据存储。此版本成为SQLite被广泛采用的基础。
- 开源与标准化
- 代码采用公共领域授权(无版权限制),允许任何个人或企业免费商用。同时兼容SQL-92标准,提供C/C++、Python等多语言接口。
(3)成熟与生态扩展期(2004-2020年)
- 关键版本迭代
- 2006年V3.3.0:支持全文搜索(FTS3模块),增强数据处理能力。
- 2010年V3.6.0:引入预写日志(WAL)模式,显著提升多进程并发写入性能。
- 2014年V3.8.0:新增JSON1扩展,适应现代Web应用的数据交换需求。
- 行业渗透
- 移动端:成为Android和iOS的默认内置数据库,支撑本地存储(如通讯录、应用缓存)。
- 嵌入式设备:应用于工业控制器、医疗仪器等低资源环境,全球装机量超万亿级。
(4)持续演进与现代应用(2020年至今)
- 新特性与优化
- 2023年V3.42.0:增强窗口函数支持,提升复杂查询效率。
- 2025年V3.45.0:优化JSONB二进制存储格式,减少解析开销。
- 未来方向
- 安全强化:探索数据加密与隐私保护机制。
- 云适配:研究分布式扩展方案,突破单文件存储限制。
(5)版本变更日志
- SQLite 的官方主页 https://www.sqlite.org 提供了详细的发布历史和每个版本的发布说明。你可以访问 Change Log 页面查看所有版本的变更记录,或者访问 Release History 页面查看按时间顺序排列的版本历史。
- 版本号的含义:版本号通常由三个部分组成:
主版本号.次版本号.修订版本号,例如3.42.0。- 主版本号 (Major Version):
- 当 SQLite 做出不兼容的 API 或 ABI(应用程序二进制接口)更改时,主版本号会增加。例如,从 2.x 到 3.x 是一次重大升级,涉及了数据库文件格式的变更。
- 次版本号 (Minor Version):
- 次版本号表示添加了新的功能或特性,但保持向后兼容。也就是说,新版本可以读取旧版本创建的数据库文件,并且 API 和 ABI 仍然兼容。
- 修订版本号 (Patch Version):
- 修订版本号表示对现有功能的错误修复和小的改进。这些更新通常是安全的,不会引入新的功能,也不会破坏现有的功能。
- 主版本号 (Major Version):
3、体系架构
(1)模块化架构分层
- SQLite采用分层设计,由编译器、虚拟机与后端存储三大子系统构成,各层独立协作。
- 接口层(Interface)
- 提供C语言API,支持Python/Java/PHP等语言扩展调用
- 核心接口:
sqlite3_open()(连接数据库)、sqlite3_exec()(执行SQL)、sqlite3_prepare()(预处理语句)
- 编译器(Compiler)
- 分词器(Tokenizer):将SQL字符串拆解为语法标记(Tokens)
- 解析器(Parser):基于Lemon LALR(1) 生成器,构建语法树(Syntax Tree)
- 优化点:Tokenzier主动调用Parser,避免YACC/BISON的滞后性问题
- 代码生成器(Code Generator):将语法树转为虚拟机器码(VDBE字节码)
- 按SQL类型分工:
select.c处理查询,insert.c处理插入,where.c优化条件过滤
- 按SQL类型分工:
(2)虚拟机(VDBE)------ 执行引擎核心
- 虚拟数据库引擎(VDBE) 解释执行编译器生成的字节码,模拟CPU处理流程。
- 指令集特性
- 128个操作码(Opcodes),专为数据库操作设计(如
OpenCursor打开游标) - 基于栈式存储:中间结果暂存于内存栈,指令操作数≤3个
- 128个操作码(Opcodes),专为数据库操作设计(如
- 关键模块
vdbe.c:虚拟机主执行逻辑vdbeaux.c:辅助函数(如字节码组装)vdbemem.c:管理Mem对象(存储整数、文本等数据类型)
- 💡 例:
SELECT * FROM table→ 生成OpenRead(打开表)、Next(遍历行)等指令序列
(3)后端存储(Back-End)------ 数据持久化引擎
- 负责磁盘数据管理,包含两级关键组件:
- B-tree索引引擎
- 文件位置:
btree.c - 功能:管理表/索引的树形结构,实现O(log n)复杂度检索
- 特性:每个表/索引独立B-tree,全库存于单一磁盘文件
- 文件位置:
- 页缓存(Pager)
- 文件位置:
pager.c - 核心职责:
- 缓冲磁盘页(默认1KB/页,可配置512B~64KB)
- 实现ACID事务:通过预写日志(WAL模式)和回滚日志保证原子性
- 锁机制:文件锁控制并发写入(高并发场景性能受限的主因)
- 文件位置:
(4)关键协作流程(以写入为例)

(5)架构特性与局限
- 优势
- 单文件设计:零部署依赖,跨平台兼容
- 轻量化:核心库<600KB,内存占用低
- 局限
- 并发瓶颈:文件锁机制限制多进程写入
- 功能裁剪:
- 不支持存储过程、
FULL OUTER JOIN - 视图只读(不可通过视图修改数据)
- 不支持存储过程、