SQLite - 概述
SQLite:现代嵌入式数据库
Section titled “SQLite:现代嵌入式数据库”本指南提供了 SQLite 的现代概览,探讨了它在当代软件开发中的作用,以及它如何作为强大、轻量级的数据库解决方案脱颖而出。
什么是 SQLite?
Section titled “什么是 SQLite?”SQLite 是一个 C 语言库,实现了一个小型、快速、自包含、高可靠性、功能齐全的 SQL 数据库引擎。与客户端-服务器数据库(如 MySQL 或 PostgreSQL)不同,SQLite 是无服务器的,直接嵌入到最终应用程序中。整个数据库(定义、表、索引以及数据本身)以单个跨平台文件的形式存储在主机上。
其源代码属于公共领域(public domain),因此可以免费用于任何目的,无论是商业还是个人用途。
为何在 2024 年选择 SQLite?
Section titled “为何在 2024 年选择 SQLite?”- 无服务器架构:无需单独的服务器进程进行安装、设置、配置、管理或故障排除。这简化了部署并降低了操作开销。
- 零配置:SQLite 开箱即用。没有配置文件,也不需要进行管理任务。
- 事务 ACID 合规性:即使在系统崩溃和断电后,事务也具备原子性(Atomic)、一致性(Consistent)、隔离性(Isolated)和持久性(Durable),这确保了数据完整性。
- 移动和桌面应用程序:它是 Android、iOS(通过 Core Data)和 macOS 的原生数据存储引擎。非常适合使用 Electron 或 Tauri 等框架构建的桌面应用程序。
- 本地优先和离线优先应用:通过将数据本地存储,然后在与中央服务器同步之前,确保应用程序在离线状态下也能可靠工作。
- 原型设计与开发:对于最终将使用客户端-服务器数据库的较大型应用程序的开发和测试阶段而言,这是一个绝佳的选择。
- 数据分析与缓存:用于分析中等规模的数据集,或作为从远程 API 获取数据的本地缓存。
- 物联网(IoT)和边缘计算:其小巧的占用空间和高可靠性使其非常适合资源受限的设备。
关键里程碑与演进
Section titled “关键里程碑与演进”- 2000:D. Richard Hipp 创建了 SQLite 1.0。
- 2013 (v3.8.0):引入了公共表表达式(Common Table Expressions, CTEs),这是一个用于编写可读、递归查询的强大功能。
- 2015 (v3.9.0):添加了对
UPSERT(INSERT ON CONFLICT) 的支持。 - 2018 (v3.25.0):添加了窗口函数(Window Functions),实现了复杂的分析查询。同时增加了
ALTER TABLE RENAME COLUMN支持。 - 2021 (v3.35.0):添加了
ALTER TABLE DROP COLUMN支持。 - 2022 (v3.39.0):最终添加了
RIGHT和FULL OUTER JOIN支持,使 SQLite 的 JOIN 功能与其他主流数据库保持一致。 - 2023+:持续的性能改进、JSON 函数增强以及持续的功能开发。
[更新] SQLite 功能支持与限制
Section titled “[更新] SQLite 功能支持与限制”现代 SQLite 功能强大,但理解其设计理念至关重要。以下是对其功能的最新解读,旨在纠正一些过时的信息。
| 功能 | 状态与现代实践 |
|---|---|
| 外部连接(Outer Joins) | 完全支持。LEFT、RIGHT 和 FULL OUTER JOIN 都已实现(自 v3.39.0 起)。“只支持 LEFT JOIN”的旧限制已不再成立。 |
| ALTER TABLE | 大部分支持。RENAME TABLE、ADD COLUMN、RENAME COLUMN 和 DROP COLUMN 都支持。修改列的类型或约束仍然需要更复杂的迁移过程(创建新表、复制数据、删除旧表)。 |
| 可更新视图(Updatable Views) | 视图默认是只读的。但是,您可以在视图上创建 INSTEAD OF 触发器,以拦截 INSERT、UPDATE 或 DELETE 操作,并将逻辑应用于底层表,从而有效地使视图可更新。 |
| 用户管理(User Management) | 设计上不支持。SQLite 没有用户、GRANT 或 REVOKE 的概念。访问控制是在文件系统级别处理的(即,谁可以读取/写入数据库文件)。 |
| 触发器(Triggers) | FOR EACH ROW 触发器得到全面支持。FOR EACH STATEMENT 触发器则不支持。这是一个蓄意的设计选择,符合大多数使用场景。 |
SQLite 命令类别
Section titled “SQLite 命令类别”SQLite 使用标准的 SQL 命令,这些命令可以按功能分组:
- 数据定义语言 (DDL):定义数据库模式。(
CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE INDEX) - 数据操作语言 (DML):用于添加、更新或删除数据。(
INSERT、UPDATE、DELETE) - 数据查询语言 (DQL):用于检索数据。(
SELECT语句) - 事务控制语言 (TCL):管理事务以确保数据完整性。(
BEGIN TRANSACTION、COMMIT、ROLLBACK)