【MapSheep】
[好记性不如烂笔头]

一、SQLite 核心定位(一句话总结)

它是无服务器、零配置、单文件存储的嵌入式关系型数据库,轻量到无需安装服务端,无需账号密码,直接操作 .db 文件即可,适合小型应用、嵌入式设备、本地缓存等场景(比如手机App、桌面软件、简单爬虫存储),不适合高并发、大数据量的生产服务端场景。它将整个数据库存储在一个单一文件中,是世界上使用最广泛的数据库引擎‌。

二、和你之前操作的 PostgreSQL 核心区别(关键差异)

  1. 无需部署:SQLite 没有服务进程,直接通过库文件操作本地 .db 文件,PostgreSQL 是客户端/服务端架构,需要启动服务。
  2. 语法简化:SQLite 支持标准 SQL,但省略了部分复杂语法(比如 BIGSERIAL 不存在,自增用 INTEGER PRIMARY KEY AUTOINCREMENT;无 CHECK 约束的强校验;外键默认关闭,需手动开启)。
  3. 无用户权限:没有 PostgreSQL 那样的用户、角色、权限管理,单文件的权限依赖操作系统文件权限。

三、你之前建表语句适配 SQLite 的核心示例(以围栏人员关联表为例)

-- 围栏与人员关联表(SQLite 版本)
CREATE TABLE sys_fence_people_association (
    id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 替代 PostgreSQL 的 BIGSERIAL
    fence_id INTEGER,
    people_id INTEGER,
    create_by TEXT DEFAULT '',  -- 用 TEXT 替代 VARCHAR(SQLite 中 VARCHAR 兼容但推荐 TEXT)
    create_time DATETIME,       -- 用 DATETIME 替代 timestamp
    update_by TEXT DEFAULT '',
    update_time DATETIME
);

-- 开启外键(SQLite 外键默认关闭,必须手动执行)
PRAGMA foreign_keys = ON;

-- 若需添加外键(适配 SQLite 语法)
ALTER TABLE sys_fence_people_association
ADD CONSTRAINT fk_fence_people_fence FOREIGN KEY (fence_id) REFERENCES sys_fence_alarm(id);

四、有主见的使用建议

  1. 小型本地项目(比如桌面工具、单机小程序)优先选 SQLite,开发效率拉满,无需折腾部署。
  2. 若涉及多用户并发写入、大数据量存储、复杂权限控制,直接放弃 SQLite,选 PostgreSQL/Mysql 更稳妥。
  3. 操作 SQLite 时,记得先执行 PRAGMA foreign_keys = ON; 开启外键约束,否则外键配置会形同虚设。

总结

  1. SQLite 是轻量嵌入式数据库,核心优势是零配置、单文件、易上手。
  2. 与 PostgreSQL 核心差异在部署架构和语法细节,适用场景截然不同。
  3. 小型本地项目首选 SQLite,高并发场景不适用,且使用时需手动开启外键约束。
posted on 2026-02-02 16:21  (Play)  阅读(1)  评论(0)    收藏  举报