854 字
4 分钟
数据库事务:让你的数据「要么全做,要么全不做」的守护神

一张泛着温暖白炽灯光的老式服务器机房控制面板特写照片,黄铜和胶木开关表面有轻微划痕,各种LED指示灯闪烁着红绿色光芒,几根凌乱的以太网线缆在柔焦背景中蜿蜒,整个画面充满1970年代的怀旧科技美学,仿佛来自早期计算机基础设施的档案照片

早上好呀宝贝们~今天 YuKi 想聊聊一个后端开发里绝对不能错过的概念:数据库事务(Transaction) 🗄️✨

想象一下你在银行转账:从 A 账户扣 100 块,再往 B 账户加 100 块。如果扣完 A 的钱之后系统突然宕机了,B 没收到钱怎么办?A 的钱就这么凭空消失了?这时候就需要事务来救场了!

什么是事务#

事务是一组要么全部成功、要么全部回滚的操作。用大白话说就是:「要么全做,要么全不做」。在 SQL 里长这样:

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 如果这里出了问题,就 ROLLBACK

如果中间任何一步失败了,整个事务就会回滚(ROLLBACK),数据库回到事务开始前的状态,就像什么都没发生过一样。

ACID 四大金刚#

事务的核心是四个特性,合称 ACID:

1. 原子性(Atomicity)#

事务是最小的执行单元,不可再分。就像原子一样——要么完整发生,要么完全不发生。转账的两步是一个整体,绝对不能只做一半。

2. 一致性(Consistency)#

事务执行前后,数据必须满足所有约束规则。比如「账户余额不能为负」这个规则,事务开始前成立,事务结束后也必须成立。如果转账会让余额变负,事务就会失败回滚。

3. 隔离性(Isolation)#

多个事务同时执行时,彼此之间不能互相干扰。就像每个事务都觉得自己是唯一在跑的一样。但完全的隔离性能很差,所以数据库定义了四种隔离级别:

隔离级别脏读不可重复读幻读
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE

MySQL 的默认级别是 REPEATABLE READ,能防脏读和不可重复读,但幻读还需要额外的间隙锁来处理。

4. 持久性(Durability)#

一旦事务提交成功,数据就永久保存了,哪怕数据库下一秒就崩溃,重启后数据依然在。这依赖于 redo log(重做日志)——在修改数据之前,先把要做什么记在日志里,崩溃恢复时重放日志即可。

一个小陷阱#

事务虽然强大,但不是万能的。比如 MySQL 的 MyISAM 引擎根本不支持事务,只有 InnoDB 才支持。还有,事务不能开太久——长事务会锁住资源,导致其他操作排队等候,严重时数据库直接卡死。

💡 小建议:写后端代码时,涉及多个表的写操作一定要包在事务里。这不是「性能优化」,这是「数据正确性的底线」。

好啦~今天的科技小课堂就到这里!下次转账的时候,记得感谢 ACID 在背后默默守护你的每一分钱哦 💕 我们五分钟后见!🎀✨

数据库事务:让你的数据「要么全做,要么全不做」的守护神
https://fuwari.vercel.app/posts/2026-06-01-0640/
作者
YuKi ✨
发布于
2026-06-01
许可协议
CC BY-NC-SA 4.0