文章目录
- [一、SQLite 是什么?](#一、SQLite 是什么?)
- [二、在 Node.js 项目中使用 SQLite(示例)](#二、在 Node.js 项目中使用 SQLite(示例))
-
- [1. 安装依赖](#1. 安装依赖)
- [2. 初始化数据库](#2. 初始化数据库)
- [3. 执行 CRUD 操作](#3. 执行 CRUD 操作)
- [三、SQLite 的适用场景](#三、SQLite 的适用场景)
- 四、工具与管理
- [五、SQLite vs JSON vs MySQL 对比](#五、SQLite vs JSON vs MySQL 对比)
- 六、进阶
如果你希望在项目中用一个"轻量但靠谱的数据库 ",那 SQLite 是非常合适的选择。
它介于"JSON 文件"和"大型数据库"之间,非常适合中小项目,尤其是单机应用、Electron、Node.js 后端、小型 Web 服务等。
一、SQLite 是什么?
SQLite 是一个嵌入式关系型数据库 ,它不像 MySQL / Postgres 那样需要部署服务,它就是一个单一的
.db
文件。
- 只需一个文件 ,比如
database.sqlite
- 语法兼容标准 SQL
- 无需安装服务,开箱即用
- 支持事务、索引、JOIN 等
- 可与任何后端框架集成(Node、Python、Go...)
二、在 Node.js 项目中使用 SQLite(示例)
我们以 Node + TypeScript 为例
1. 安装依赖
使用 better-sqlite3(同步、简单、非常快):
bash
npm install better-sqlite3
# 或
yarn add better-sqlite3
2. 初始化数据库
创建一个 db.js
或 db.ts
文件:
ts
import Database from 'better-sqlite3';
// 创建或连接到数据库文件(会自动创建)
const db = new Database('myapp.db');
// 创建一个表(如果不存在)
db.prepare(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)
`).run();
export default db;
这段代码会在项目目录生成 myapp.db
文件。
3. 执行 CRUD 操作
ts
import db from './db';
// 插入
const insert = db.prepare('INSERT INTO users (name, age) VALUES (?, ?)');
insert.run('Tom', 25);
insert.run('Alice', 30);
// 查询
const allUsers = db.prepare('SELECT * FROM users').all();
console.log(allUsers);
// 查询单个
const getUser = db.prepare('SELECT * FROM users WHERE id = ?').get(1);
console.log(getUser);
// 更新
const update = db.prepare('UPDATE users SET age = ? WHERE id = ?');
update.run(26, 1);
// 删除
const del = db.prepare('DELETE FROM users WHERE id = ?');
del.run(2);
非常接近标准 SQL,语法简单明了。
三、SQLite 的适用场景
场景类型 | SQLite 适合吗 | 说明 |
---|---|---|
开发 / 原型 / Demo | ✔️ | 免安装、快速上手 |
小型 Web 后端 | ✔️ | 适合个人项目、管理后台 |
桌面端 / Electron 应用 | ✔️ | 非常常见(例如 VS Code 插件的数据也用 SQLite) |
边缘计算 / Serverless | ✔️ | 文件式存储,部署轻量 |
大型高并发 Web 系统 | ❌ | 不适合高并发写入、分布式场景 |
四、工具与管理
-
图形化管理工具(方便直接查看和编辑数据库)
- DB Browser for SQLite(免费、开源)
- TablePlus / Beekeeper Studio / DBeaver
-
SQLite 自带 CLI 工具:
bashsqlite3 myapp.db .tables SELECT * FROM users;
五、SQLite vs JSON vs MySQL 对比
特性 | JSON 文件 | SQLite | MySQL/PostgreSQL |
---|---|---|---|
安装难度 | 无 | 无(内嵌) | 需要安装服务 |
存储规模 | 小 | 中等 | 大 |
并发 | 差 | 一般(读多写少场景OK) | 好 |
查询能力 | 无 | 支持 SQL | 支持 SQL(复杂功能更多) |
索引 / JOIN / 事务 | ❌ | ✅ | ✅ |
适用项目规模 | 配置 / Demo | 小中型 | 中大型 |
所以 SQLite 可以完美替代 JSON 文件存储的场景,还能提供更多可靠性和查询能力。
六、进阶
-
使用 ORM(如 Prisma / Drizzle / Sequelize)+ SQLite
👉 这样就不用手写 SQL 了,适合 React + Node 全栈项目
bashnpm install prisma --save-dev npx prisma init --datasource-provider sqlite
-
Prisma schema 示例:
prismamodel User { id Int @id @default(autoincrement()) name String age Int? }
-
生成和使用:
bashnpx prisma migrate dev --name init npx prisma generate
这样你就可以在代码中直接用 TypeScript 调用数据库了:
ts
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const user = await prisma.user.create({
data: { name: 'Tom', age: 25 }
})
const users = await prisma.user.findMany()
console.log(users)
具体可以阅读 HOW - 浅试前端的 Typescript ORM(含 Drizzle、Turso SQLite)
总结一句话:
如果你之前是用 JSON 文件模拟数据库,现在升级到 SQLite 是最自然的进阶。
它简单、稳定、支持 SQL,能支撑中小项目的真实业务。