【星海出品】SQLite的进阶操作

因为去年到今年初和一些DBA做了一些大型项目,深刻的了解了数据库操作的运维与可靠性操作是非常消耗精力和时间的。所以这篇文章用来记录一些数据库的操作,方便后续直接使用。

因为今年一直在做Hermes和OpenClaw以及一些自己的开源项目,所以用到SQLite 比较多,由于深刻的认识到传统的大型多并发数据库要做好是需要非常大的精力去操作的,所以后续一些个人文章非大型场景且专题数据库的操作,都会用SQLite来进行。

重新建表,保留表中原来数据,主要为重新增加主键问题

bash 复制代码
-- 直接在文件层面复制 english_learning.db

-- 建新表(带 domain,主键含领域)
CREATE TABLE MemoryNodes_new (
    user_id INTEGER NOT NULL,
    word_id INTEGER NOT NULL,
    domain TEXT NOT NULL DEFAULT 'web_programming',
    review_count INTEGER DEFAULT 1,
    ease_factor REAL DEFAULT 2.5,
    interval_days INTEGER DEFAULT 1,
    memory_strength REAL DEFAULT 0.5,
    forgetting_curve REAL DEFAULT 1.0,
    next_review_at DATETIME,
    memory_status TEXT DEFAULT 'learning',
    difficulty_score REAL DEFAULT 0.5,
    priority_score REAL DEFAULT 0.5,
    is_active INTEGER DEFAULT 1,
    word_root_score REAL DEFAULT 0.5,
    word_affix_score REAL DEFAULT 0.5,
    etymology_score REAL DEFAULT 0.5,
    spelling_score REAL DEFAULT 0.5,
    pos_score REAL DEFAULT 0.5,
    context_score REAL DEFAULT 0.5,
    frequency_score REAL DEFAULT 0.5,
    consecutive_correct INTEGER DEFAULT 0,
    consecutive_wrong INTEGER DEFAULT 0,
    static_priority_score REAL DEFAULT 0.0,
    last_reviewed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (user_id, domain, word_id),
    FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE,
    FOREIGN KEY (word_id) REFERENCES Words(word_id) ON DELETE CASCADE
);

-- 迁移旧数据(存量行归到默认领域 web_programming)
INSERT INTO MemoryNodes_new
    (user_id, word_id, domain, review_count, ease_factor, interval_days,
     memory_strength, forgetting_curve, next_review_at, memory_status,
     difficulty_score, priority_score, is_active, word_root_score, word_affix_score,
     etymology_score, spelling_score, pos_score, context_score, frequency_score,
     consecutive_correct, consecutive_wrong, static_priority_score,
     last_reviewed_at, created_at, updated_at)
SELECT
    user_id, word_id, 'web_programming', review_count, ease_factor, interval_days,
    memory_strength, forgetting_curve, next_review_at, memory_status,
    difficulty_score, priority_score, is_active, word_root_score, word_affix_score,
    etymology_score, spelling_score, pos_score, context_score, frequency_score,
    consecutive_correct, consecutive_wrong, static_priority_score,
    last_reviewed_at, created_at, updated_at
FROM MemoryNodes;

-- 换表
DROP TABLE MemoryNodes;
ALTER TABLE MemoryNodes_new RENAME TO MemoryNodes;

-- 重建索引(原 idx_memory_user 已随旧表删除)
CREATE INDEX IF NOT EXISTS idx_memory_user ON MemoryNodes(user_id);
CREATE INDEX IF NOT EXISTS idx_memory_user_domain ON MemoryNodes(user_id, domain);
相关推荐
张洛闻Eren8 分钟前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安24 分钟前
MySQL-触发器
数据库·mysql
白远山26 分钟前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
Omics Pro35 分钟前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理
2603_965148111 小时前
AI+API选品:下一代智能商务助手雏形已现
java·大数据·数据库·人工智能·数据挖掘
lbb 小魔仙1 小时前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
李白客2 小时前
数据融合平台怎么选:批流一体、实时同步与数据质量的 7 个维度
数据库·数据库架构
数据库小学妹2 小时前
MySQL库存扣减实战:原子UPDATE、分桶方案与锁范围分析
数据库·后端·mysql
旺仔不是程序员2 小时前
LIMIT 1:PostgreSQL 只取一行的高效查询姿势
数据库·后端·sql