一、SQLite 核心特性
SQLite是无服务器、单文件、零配置、ACID兼容的嵌入式关系型数据库,核心库仅百KB,广泛用于移动端、桌面应用、IoT、本地缓存与单元测试。
-
无需安装服务,直接读写.db/.sqlite文件
-
支持标准SQL-92子集,轻量易用
-
动态类型+类型亲和性,兼容主流数据库语法
二、SQLite 核心SQL语法(复习重点)
2.1 数据类型(必记)
SQLite内部只有5种存储类型,列声明仅为类型亲和性(非强制校验)。
| INTEGER | 整数(1/2/3/4/6/8字节) | INT/BIGINT/TINYINT |
| TEXT | 字符串(UTF-8/16) | CHAR/VARCHAR/TEXT |
| REAL | 浮点数(8字节IEEE) | FLOAT/DOUBLE |
| BLOB | 二进制数据(原样存储) | BLOB |
| NULL | 空值 | NULL |
| 提示:3.37.0+支持STRICT表开启严格类型校验。 |
2.2 DDL 数据定义
建表(带约束)
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT, — 自增主键
username TEXT NOT NULL UNIQUE, — 非空+唯一
age INTEGER CHECK (age >= 0), — 检查约束
email TEXT COLLATE NOCASE, — 大小写不敏感
create_time TEXT DEFAULT CURRENT_TIMESTAMP — 默认时间
);
常用DDL
— 修改表名
ALTER TABLE user RENAME TO app_user;
— 添加字段
ALTER TABLE app_user ADD COLUMN phone TEXT;
— 删除表
DROP TABLE IF EXISTS app_user;
注意:不支持直接修改字段类型/重命名字段,需新建表迁移数据。
2.3 DML 数据操作
插入(支持冲突处理)
— 常规插入
INSERT INTO user (username, age) VALUES ('zhangsan', 20);
— 冲突替换(唯一键冲突时覆盖)
INSERT OR REPLACE INTO user (username, age) VALUES ('zhangsan', 21);
— 冲突忽略
INSERT OR IGNORE INTO user (username, age) VALUES ('zhangsan', 22);
更新/删除
— 更新(必须加WHERE,否则全表更新)
UPDATE user SET age=22 WHERE id=1;
— 删除
DELETE FROM user WHERE id=1;
— 清空表(无TRUNCATE,用DELETE)
DELETE FROM user;
2.4 DQL 数据查询
基础查询
— 条件+分页
SELECT id, username FROM user WHERE age>18 ORDER BY id DESC LIMIT 10 OFFSET 0;
— 模糊查询
SELECT * FROM user WHERE username LIKE 'zhang%';
— 聚合查询
SELECT COUNT(*), AVG(age) FROM user GROUP BY age HAVING AVG(age)>20;
多表连接
— 内连接
SELECT u.username, o.order_no FROM user u
JOIN orders o ON u.id=o.user_id;
— 左连接
SELECT u.username, o.order_no FROM user u
LEFT JOIN orders o ON u.id=o.user_id;
注意:不支持FULL OUTER JOIN,可通过UNION模拟。
2.5 事务与约束
— 开启事务
BEGIN TRANSACTION;
UPDATE user SET age=23 WHERE id=1;
— 提交
COMMIT;
— 回滚
ROLLBACK;
— 开启外键约束(默认关闭)
PRAGMA foreign_keys = ON;
三、SQLite vs MySQL vs Oracle(核心区别)
| 架构 | 无服务端(嵌入进程) | 客户端/服务端 | 客户端/服务端 |
| 存储 | 单文件 | 多文件/表空间 | 表空间+数据文件 |
| 类型系统 | 动态类型+亲和性 | 静态强类型 | 静态强类型 |
| 并发 | 单写多读,高并发弱 | MVCC,高并发强 | MVCC,企业级并发 |
| 高级特性 | 无存储过程、无用户权限 | 支持存储过程、触发器 | 完整企业级特性 |
| 部署 | 零配置,开箱即用 | 需安装配置 | 重型部署,专业运维 |
| 适用场景 | 嵌入式、本地缓存 | Web应用、中小项目 | 金融、政企核心系统 |
四、高频踩坑点
无TRUNCATE:用DELETE FROM 表清空表
字段修改受限:不支持直接改字段名/类型
外键默认关闭:需手动PRAGMA foreign_keys=ON开启
并发写入瓶颈:写操作锁库,不适合高并发写入
无权限系统:文件即权限,依赖操作系统权限控制
五、适用场景总结
✅ 推荐使用:移动端/桌面应用、IoT设备、本地数据存储、单元测试、小型工具
❌ 不推荐:高并发Web服务、海量数据、多用户协同写入
六、结语
SQLite以轻量、零配置为核心优势,语法兼容标准SQL,学习成本低。掌握本文语法与差异点,可快速应对面试与日常开发。建议结合sqlite3命令行或DBeaver实操,加深记忆。
网硕互联帮助中心




评论前必须登录!
注册