索引与事务:一条 update 背后发生了什么

会 CRUD 只是识字。本周建立两个关键直觉:索引让查找更快事务让多步操作要么全成要么全不成

索引:书的目录

没有索引,数据库常常要「全表扫描」。主键本身就是索引。你也可以给常查字段加索引:

CREATE INDEX idx_article_title ON article(title);

注意:

  • 索引加快查,但拖慢写(要维护目录)
  • 不是越多越好
  • 先保证主键与高频查询条件合理

入门阶段能回答即可:为什么要有索引?它牺牲了什么换速度?

事务:把多步当成一步

转账经典例子:A 减钱、B 加钱,必须一起成功。

START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 出错则 ROLLBACK;

ACID(先记名字与直觉)

特性 直觉
Atomicity 原子性 要么全做,要么全不做
Consistency 一致性 不破坏业务约束
Isolation 隔离性 并发事务互不打扰(有级别)
Durability 持久性 提交后断电也不丢

隔离级别名字知道即可:读未提交、读已提交、可重复读、串行化。MySQL InnoDB 默认常是可重复读。

一条 UPDATE 背后(叙事版)

  1. 客户端发送 SQL
  2. 找到要改的行(可能走索引)
  3. 在事务中写入变更(还有日志保障持久化)
  4. COMMIT 后对其他会话可见

细节极深,入门先建立「不是改内存变量那么简单」的敬畏。

本周练习清单

写在最后

数据库的正确性与性能,常常比业务代码更「致命」。


YoungGc · Eden手记
学习是第一生产力。

posted @ 2026-08-12 08:56  Eden手记  阅读(2)  评论(0)    收藏  举报