SQLite 是嵌入式关系型数据库,直接读写文件,零配置、无服务。与 MySQL 核心差异如下。
1. 本质
- 不是 C/S 架构:只是一个库,程序直接读写
.db文件。 - 弱类型:字段类型只是“推荐”,实际存任何类型(除
INTEGER PRIMARY KEY外)。 - 写锁表:高并发写场景不适合,但读可并发。
2. 数据类型
| 声明写什么 | 实际存为什么 |
|---|---|
INT, INTEGER 等 | INTEGER |
TEXT, VARCHAR 等 | TEXT |
REAL, FLOAT | REAL |
BLOB | BLOB |
其他 (DATE,BOOLEAN…) | NUMERIC(尝试转数字,否则 TEXT) |
无专用日期时间类型:通常存 TEXT(ISO 8601)或 INTEGER(Unix 时间戳)。
3. 建表与自增
-- 自增主键(推荐写法,无需写 AUTOINCREMENT)
CREATE TABLE student (
id INTEGER PRIMARY KEY, -- 自动自增
name TEXT NOT NULL
);
-- 若强制要求连续无间隙才用 AUTOINCREMENT(增加开销)对比 MySQL:
AUTO_INCREMENT→INTEGER PRIMARY KEY即可。
4. 常用命令
| 命令 | 作用 |
|---|---|
.tables | 列出所有表(代替 SHOW TABLES) |
.schema [table] | 查看表结构(代替 DESC) |
.quit | 退出 |
.mode column; .headers on | 美化输出 |
5. 与 MySQL 关键差异
| 项目 | MySQL | SQLite |
|---|---|---|
| 自增语法 | AUTO_INCREMENT | INTEGER PRIMARY KEY(自动自增) |
| 列出表 | SHOW TABLES; | .tables |
| 查看表结构 | DESC table; | .schema table |
| 客户端 | 独立 mysql 进程 | sqlite3 命令行 |
| 数据类型 | 强类型 | 弱类型(实际值决定类型) |
| 并发写 | 行锁/表锁,高并发 | 写时锁全表,低并发 |
| 网络访问 | 支持 | 仅本地文件 |
6. C++ / Python 使用简例
C++:
sqlite3* db;
sqlite3_open("test.db", &db);
sqlite3_exec(db, "CREATE TABLE t(id INT PRIMARY KEY, name TEXT)", ...);
sqlite3_close(db);Python:
import sqlite3
conn = sqlite3.connect("test.db")
conn.execute("CREATE TABLE t(id INTEGER PRIMARY KEY, name TEXT)")编译链接
-lsqlite3;Python 内置模块。
7. 适用场景
- 移动端、桌面软件、嵌入式、小型 Web(低并发)
- 数据量 <1TB,读多写少
总结:把 SQLite 当成一个“支持 SQL 的本地文件”,记住 .tables / .schema 替代 SHOW TABLES / DESC,自改用 INTEGER PRIMARY KEY,类型宽松即可。