WHAT - SQLite 数据库

文章目录

  • [一、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.jsdb.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 系统 不适合高并发写入、分布式场景

四、工具与管理

  • 图形化管理工具(方便直接查看和编辑数据库)

  • SQLite 自带 CLI 工具:

    bash 复制代码
    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 全栈项目

    bash 复制代码
    npm install prisma --save-dev
    npx prisma init --datasource-provider sqlite
  • Prisma schema 示例:

    prisma 复制代码
    model User {
      id    Int     @id @default(autoincrement())
      name  String
      age   Int?
    }
  • 生成和使用:

    bash 复制代码
    npx 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,能支撑中小项目的真实业务。

相关推荐
一只小bit1 天前
MySQL 索引:从聚簇到普通索引,如何加快查询效率?
数据库·mysql·oracle
洛克大航海1 天前
解锁 PySpark SQL 的强大功能:有关 App Store 数据的端到端教程
linux·数据库·sql·pyspark sql
XueminXu1 天前
ClickHouse数据库的表引擎
数据库·clickhouse·log·表引擎·mergetree·special·integrations
冒泡的肥皂1 天前
MVCC初学demo(二
数据库·后端·mysql
代码程序猿RIP1 天前
【Redis 】Redis 详解以及安装教程
数据库·etcd
小生凡一1 天前
redis 大key、热key优化技巧|空间存储优化|调优技巧(一)
数据库·redis·缓存
oe10191 天前
好文与笔记分享 A Survey of Context Engineering for Large Language Models(上)
数据库·笔记·语言模型·agent·上下文工程
小马哥编程1 天前
【软考架构】案例分析-对比MySQL查询缓存与Memcached
java·数据库·mysql·缓存·架构·memcached
一 乐1 天前
高校后勤报修系统|物业管理|基于SprinBoot+vue的高校后勤报修系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·毕设
折翼的恶魔1 天前
SQL190 0级用户高难度试卷的平均用时和平均得分
java·数据库