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

相关推荐
ivanfor6661 小时前
多租户架构的三级权限体系:设计逻辑与精准控制实现
java·开发语言·数据库
TDengine (老段)2 小时前
TDengine IDMP 重塑智慧水务运营(内附 Step by Step 步骤)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
LSL666_5 小时前
1 概述及简单登录(不涉及数据库)
数据库·servlet
q***06478 小时前
MySQL的UPDATE(更新数据)详解
数据库·mysql
8***B8 小时前
MySQL性能
数据库·mysql
q***72199 小时前
oracle使用PLSQL导出表数据
数据库·oracle
数据库生产实战9 小时前
Oracle DG备库日志切换解析,Private strand flush not complete如何理解?(基础知识)
数据库·oracle
百***75749 小时前
从 SQL 语句到数据库操作
数据库·sql·oracle
i***39589 小时前
SQL 注入详解:原理、危害与防范措施
数据库·sql·oracle
m***567210 小时前
Win10下安装 Redis
数据库·redis·缓存