WHAT - SQLite 数据库
文章目录
- 一、SQLite 是什么?
- 二、在 Node.js 项目中使用 SQLite(示例)
- 1. 安装依赖
- 2. 初始化数据库
- 3. 执行 CRUD 操作
- 三、SQLite 的适用场景
- 四、工具与管理
- 五、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(同步、简单、非常快):
npm install better-sqlite3
# 或
yarn add better-sqlite3
2. 初始化数据库
创建一个 db.js
或 db.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 操作
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 工具:
sqlite3 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 全栈项目npm install prisma --save-dev npx prisma init --datasource-provider sqlite
-
Prisma schema 示例:
model User {id Int @id @default(autoincrement())name Stringage Int? }
-
生成和使用:
npx prisma migrate dev --name init npx prisma generate
这样你就可以在代码中直接用 TypeScript 调用数据库了:
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,能支撑中小项目的真实业务。