MySQL事务介绍
一、一个典型的事务场景
步骤 | 操作描述 | SQL 语句 |
---|---|---|
1 | 开启事务,确保转账操作的原子性 | START TRANSACTION; |
2 | 从用户 A 的账户中扣除 100 元 | UPDATE account SET balance = balance - 100 WHERE user = 'A'; |
3 | 向用户 B 的账户中添加 100 元 | UPDATE account SET balance = balance + 100 WHERE user = 'B'; |
4 | 检查用户 A 的账户余额是否足够,若不足则回滚事务 | SELECT balance FROM account WHERE user = 'A'; <br>若余额不足,执行ROLLBACK; |
5 | 若转账成功,提交事务使更改永久生效 | COMMIT; |
二、事务的特性
特性 | 描述 | 实现方式 |
---|---|---|
原子性(Atomicity) | 事务是不可分割的工作单位,要么全部执行,要么全部不执行 | 通过Undo log来实现原子性 |
一致性(Consistency) | 事务执行前后,数据库从一个一致状态转换到另一个一致状态 | 通过Redo log和Undo log来实现一致性 |
隔离性(Isolation) | 并发执行的事务之间互不干扰,一个事务的执行不能被其他事务干扰 | 通过锁来实现写与写之间事务的隔离性 MVCC来实现读和写的隔离性 |
持久性(Durability) | 事务一旦提交,其结果是永久性的,即使系统发生故障,数据也不会丢失 | Redo log实现了MySQL的持久性 |
三、事务在数据库中的作用
- 数据一致性
- 并发控制
- 故障恢复
- 应用程序逻辑的一致性