索引与事务:一条 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 背后(叙事版)
- 客户端发送 SQL
- 找到要改的行(可能走索引)
- 在事务中写入变更(还有日志保障持久化)
COMMIT后对其他会话可见
细节极深,入门先建立「不是改内存变量那么简单」的敬畏。
本周练习清单
写在最后
数据库的正确性与性能,常常比业务代码更「致命」。
YoungGc · Eden手记
学习是第一生产力。
如发现有错误欢迎指正,欢迎交流,接受反驳。 -- by不为 :)

浙公网安备 33010602011771号