一、MySQL 中的事务特性和隔离机制:
- ACID 特性:ACID 是事务处理的四个关键特性的缩写,包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
- 原子性(Atomicity):一个事务被视为一个不可分割的原子单元,要么全部执行成功,要么全部回滚到初始状态。
- 一致性(Consistency):在事务开始之前和结束之后,数据库的完整性约束没有被破坏。
- 隔离性(Isolation):指并发执行的事务之间的隔离程度。MySQL 支持四种隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
- 持久性(Durability):一旦事务成功提交,其所做的更改将永久保存在数据库中。
不同的隔离级别解决以下问题:
- 脏读(Dirty Read):一个事务读取了另一个事务尚未提交的数据。可以通过将隔离级别设置为 Read Committed 或更高级别来避免脏读。
- 不可重复读(Non-repeatable Read):在同一个事务内,多次读取同一行数据得到的结果不一样。可以通过将隔离级别设置为 Repeatable Read 或更高级别来避免不可重复读。
- 幻读(Phantom Read):一个事务在读取了某个范围的数据后,另一个事务插入了符合该范围条件的新数据,导致之前读取的结果不准确。可以通过将隔离级别设置为 Serializable 来避免幻读。
1、脏读(Dirty Read):
- 隔离级别:Read Committed(读已提交)
- 示例代码:
2、不可重复读(Non-repeatable Read):
- 隔离级别:Repeatable Read(可重复读)
- 示例代码:
3、幻读(Phantom Read):
- 隔离级别:Serializable(串行化)
- 示例代码: