SQL Lite 备忘录2

目录

[2. SQLite 有哪些事务模式?](#2. SQLite 有哪些事务模式?)

[3.SQLite 支持高并发吗?](#3.SQLite 支持高并发吗?)

[4. WAL 是什么?](#4. WAL 是什么?)

[5. SQLite 分页怎么写?](#5. SQLite 分页怎么写?)

[6. SQLite 支持哪些 ALTER TABLE?](#6. SQLite 支持哪些 ALTER TABLE?)

[7. SQLite 支持索引吗?](#7. SQLite 支持索引吗?)

8.外键与触发器

支持,而且事务具有 ACID 特性。

sql 复制代码
BEGIN;

INSERT INTO users(name) VALUES ('Tom');
UPDATE users SET name = 'Jerry' WHERE id = 1;

COMMIT;

发生错误:

复制代码
ROLLBACK;

事务的核心作用:

要么全部成功,要么全部失败。


2. SQLite 有哪些事务模式?

常见:

bash 复制代码
BEGIN DEFERRED;
BEGIN IMMEDIATE;
BEGIN EXCLUSIVE;

简单理解:

  • DEFERRED:默认,开始事务时不立即获取写锁
  • IMMEDIATE:立即尝试获取写事务资格
  • EXCLUSIVE:获取更强的排他锁

3.SQLite 支持高并发吗?

SQLite 可以很好地支持并发读取,但一个数据库文件同一时间只有一个写入者,因此大量并发写入时容易成为瓶颈。

4. WAL 是什么?

提高并发读写性能,替代传统回滚日志

cpp 复制代码
PRAGMA journal_mode=WAL;

5. SQLite 分页怎么写?

复制代码
SELECT *
FROM users
LIMIT 20 OFFSET 40;

意思:

跳过 40 条,然后返回 20 条。

但大数据量下:

复制代码
LIMIT 20 OFFSET 1000000

可能效率不好。

6. SQLite 支持哪些 ALTER TABLE?

现代 SQLite 支持:

bash 复制代码
RENAME TABLE
RENAME COLUMN
ADD COLUMN
DROP COLUMN

7. SQLite 支持索引吗?

支持。

普通索引:

复制代码
CREATE INDEX idx_user_name
ON users(name);

唯一索引:=普通索引 + 唯一性约束

复制代码
CREATE UNIQUE INDEX idx_user_email
ON users(email);

联合索引:注意左前缀顺序

复制代码
CREATE INDEX idx_user_name_age
ON users(name, age);

部分索引:只给满足某个条件的数据建立索引,而不是给整张表建立索引。

复制代码
CREATE INDEX idx_active_user
ON users(name)
WHERE active = 1;

8.外键与触发器

  • 外键(Foreign Key) :保证表与表之间的数据关系合法,比如 orders.user_id 必须对应 users.id;常用 ON DELETE CASCADE 实现父数据删除时自动删除子数据。SQLite 使用前要开启 PRAGMA foreign_keys = ON。
  • 触发器(Trigger) :当 INSERT / UPDATE / DELETE 发生时,数据库自动执行指定 SQL,比如自动记录日志;通过 NEW 获取新数据、OLD 获取旧数据。
相关推荐
CS创新实验室1 天前
改了模型,数据库为什么能自动跟上?——Django 迁移(migrations)的底层
数据库·django·sqlite
誰能久伴不乏1 天前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
l1t2 天前
测试用go语言执行脚本把数据保存到SQLite数据库
数据库·golang·sqlite
l1t2 天前
DeepSeek辅助编写连接sqlite的CLI
数据库·golang·sqlite
l1t3 天前
在windows中测试musql数据库
数据库·sqlite·go·1024程序员节
爱好曙光3 天前
SQLite WAL 高并发写入:busy_timeout 与 checkpoint 调优实战
sqlite·性能调优·checkpoint·wal·并发写入
从零数据分析4 天前
零基础学SQL 23:和上月比总对不上?LAG/LEAD 一步取出上一次(附 4 个模板)
java·数据库·sql·mysql·oracle·sqlite·database
ycydynq4 天前
django利用不涉及数据库form自定义表单 表单元素验证
数据库·django·sqlite
专注仿真5 天前
从「能跑通」到「能交付」:一套可直接落地的电商用户行为分析平台(Python + SQLite/MySQL + Streamlit 全栈源码与部署文档)
python·mysql·sqlite
用户0510122572965 天前
SQLite 学习博客(一):从零建库,理解 SQLite 的角色与第一张表
数据库·sqlite