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,能支撑中小项目的真实业务。

相关推荐
heartbeat..4 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据6 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦7 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
YMatrix 官方技术社区8 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录8 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong9 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
欧亚学术9 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
oMcLin10 小时前
如何在Oracle Linux 8.4上搭建并优化Kafka集群,确保高吞吐量的实时数据流处理与消息传递?
linux·oracle·kafka
黑白极客10 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
大厂技术总监下海10 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache