SQLite 是嵌入式关系型数据库,直接读写文件,零配置、无服务。与 MySQL 核心差异如下。


1. 本质

  • 不是 C/S 架构:只是一个库,程序直接读写 .db 文件。
  • 弱类型:字段类型只是“推荐”,实际存任何类型(除 INTEGER PRIMARY KEY 外)。
  • 写锁表:高并发写场景不适合,但读可并发。

2. 数据类型

声明写什么实际存为什么
INT, INTEGERINTEGER
TEXT, VARCHARTEXT
REAL, FLOATREAL
BLOBBLOB
其他 (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_INCREMENTINTEGER PRIMARY KEY 即可。


4. 常用命令

命令作用
.tables列出所有表(代替 SHOW TABLES
.schema [table]查看表结构(代替 DESC
.quit退出
.mode column; .headers on美化输出

5. 与 MySQL 关键差异

项目MySQLSQLite
自增语法AUTO_INCREMENTINTEGER 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,类型宽松即可。