SQLite 简介
SQLite 简介
SQLite 是一个开源的、轻量级的、零配置的嵌入式关系型数据库引擎。它以单个磁盘文件的形式存储整个数据库,无需运行数据库服务器进程,非常适合移动应用、桌面软件、物联网设备和嵌入式系统。
一、核心特点
| 特性 | 说明 |
|---|---|
| 零配置 | 无需安装、配置或管理服务器 |
| 单文件数据库 | 所有数据(表、索引、视图等)存储在 一个 .db 文件 中 |
| 跨平台 | 支持 Windows、macOS、Linux、iOS、Android |
| 自包含 | 核心库小于 500KB,运行时无需依赖 |
| 支持标准 SQL | 兼容 SQL-92 标准的大部分语法 |
| 事务完整性 | 完全支持 ACID(原子性、一致性、隔离性、持久性) |
| 高并发读 | 允许多个进程同时读取 |
| 公域软件 | 完全开源,可自由用于商业和个人项目 |
二、适用场景
| 适合 | 不适合 |
|---|---|
| 移动端 App(iOS/Android) | 高并发 Web 后端(如电商平台) |
| 桌面软件(如浏览器、聊天工具) | 大规模分布式系统 |
| 嵌入式设备(路由器、智能家居) | 需要复杂权限管理的企业系统 |
| 配置文件存储 | 实时分析海量数据 |
| 日志系统、缓存 | 每秒万级写操作 |
典型用户:Chrome、Firefox、Android、iOS、Python、PHP、Skype、Dropbox
三、与其他数据库对比
| 特性 | SQLite | MySQL | PostgreSQL |
|---|---|---|---|
| 类型 | 嵌入式 | 客户端/服务器 | 客户端/服务器 |
| 配置 | 零配置 | 需要安装服务 | 需要安装服务 |
| 并发写 | 单个写锁 | 支持高并发 | 支持高并发 |
| 部署 | 复制 .db 文件 | 复杂部署 | 复杂部署 |
| 体积 | < 500KB | > 100MB | > 100MB |
| 复制 | 文件复制 | 主从复制 | 流复制 |
四、核心概念
- 数据库 = 一个文件
myapp.db ← 包含所有表、索引、数据
- 无服务器进程
// C语言直接链接库
#include "sqlite3.h"
sqlite3_open("data.db", &db);
- 动态类型系统(弱类型)
CREATE TABLE t(x INTEGER);
INSERT INTO t(x) VALUES ('hello'); -- 允许!但不推荐
- 内置全文搜索、JSON 支持
-- JSON 函数(3.38+)
SELECT json_extract(data, '$.name') FROM logs;
-- 全文搜索
CREATE VIRTUAL TABLE docs USING fts5(title, content);
五、快速上手(命令行)
# 1. 安装
sudo apt install sqlite3 # Linux
brew install sqlite # macOS
# 2. 创建并进入数据库
sqlite3 demo.db
# 3. 在 SQLite 提示符中
sqlite> CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT);
sqlite> INSERT INTO users(name) VALUES ('张三');
sqlite> SELECT * FROM users;
1|张三
sqlite> .quit
六、为什么选择 SQLite?
轻量 + 可靠 + 简单 = 开发效率爆棚
- 无需运维:开发者就是管理员
- 版本控制友好:
.db文件可 git 管理(小型数据) - 测试方便:单元测试中使用内存数据库
:memory: - 原生支持多种语言:
import sqlite3
conn = sqlite3.connect(':memory:')
七、官方资源
- 官网:https://www.sqlite.org
- 文档:https://www.sqlite.org/docs.html
- 下载:https://www.sqlite.org/download.html
- 在线体验:https://sqlite.org/fiddle
总结:
SQLite 不是“简化版”数据库,而是“专注嵌入式场景”的专业数据库。
它小而美,稳定运行在全球数十亿台设备上,是“看不见的英雄”。
想继续学习?
回复以下关键词获取对应教程:
创建表→ 详细建表语法Python SQLite→ 完整 Python 示例性能优化→ 索引、PRAGMA、事务技巧GUI工具→ 推荐可视化工具
现在就试试:
sqlite3 test.db "SELECT sqlite_version();"
看看你的 SQLite 版本吧!