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

相关推荐
四维碎片4 小时前
【Qt】乌班图安装Qt环境
开发语言·数据库·qt
wuyunhang1234564 小时前
MySQL----触发器
数据库·mysql
ptc学习者5 小时前
OGG 安装注意事项
java·开发语言·数据库
鸽鸽程序猿5 小时前
【MySQL】索引
数据库·mysql
zym大哥大5 小时前
Redis-Zest
数据库·redis·缓存
zl9798996 小时前
Redis-stream、bitfield类型
数据库·redis·缓存
数据库那些事儿6 小时前
Qoder + ADB Supabase :5分钟GET超火AI手办生图APP
数据库·后端
IvorySQL6 小时前
PostgreSQL 18 异步 I/O(AIO)调优指南
数据库·postgresql
kakacc:6 小时前
记录一次巧妙的SQL:一对多关联导致的 sum () 、count()等group函数重复计算问题
数据库·sql