参考资料:https://juejin.cn/post/6905794080689618958
1.对读操作的影响
事务主要用于保证一组 SQL 操作的原子性、一致性、隔离性和持久性(ACID 属性)。当开启事务时,对读操作的影响主要体现在隔离级别上。 MySQL 支持以下几种事务隔离级别:
-
读未提交(Read Uncommitted):
- 事务中的修改,即使未提交,其他事务也能看到。这可能导致脏读问题。
- 对读操作影响:可能读取到其他事务尚未提交的数据。
-
读已提交(Read Committed):
- 事务只能看到其他事务已提交的修改,避免了脏读问题。
- 对读操作影响:读取的都是已提交的数据,但可能会出现不可重复读,即同一事务中的多次读取可能得到不同的结果。
-
可重复读(Repeatable Read):
- 确保在同一个事务中多次读取同一数据行的结果是一致的(即避免了不可重复读)。
- 对读操作影响:在事务开始后,其他事务的修改在当前事务中不可见,直到事务结束。这是 MySQL 的默认隔离级别。
-
可串行化(Serializable):
- 强制事务按顺序执行,避免了幻读,但代价是降低了并发性。
- 对读操作影响:可能导致更多的锁争用和等待,因为读操作会被转化为锁定读取。

在开启事务后,读操作的行为将取决于当前设置的事务隔离级别。高隔离级别通常意味着更高的安全性和一致性,但可能会降低系统的并发性能。
2.对写操作的影响
开启事务对写操作的影响主要体现在数据一致性和并发控制方面。事务的隔离级别会影响写操作的行为和性能。以下是 MySQL 事务对写操作的影响:
-
数据的一致性:
- 事务保证了写操作的原子性,即要么全部成功,要么全部失败。这样可以确保数据的一致性。
-
隔离级别的影响:
- 不同的隔离级别对写操作有不同的影响,主要体现在对其他事务的可见性和锁的使用上。
-
锁机制:
- 写操作通常会对涉及的数据行加锁,以防止其他事务同时修改相同的数据。这种锁机制可以防止更新丢失和其他并发问题。
-
性能影响:
- 高隔离级别可能导致更多的锁争用,从而影响系统的并发性能。例如,在“可串行化”级别下,事务会按顺序执行,可能导致写操作等待时间增加。
-
死锁:
- 在高并发环境中,多个事务可能会因为相互等待资源而导致死锁。 MySQL 会检测到这种情况并中止其中一个事务以解决死锁。
-
持久性:
- 一旦事务提交,写操作的结果会被永久保存,即使系统崩溃也不会丢失。
在 MySQL 中,事务对写操作的主要目标是确保数据的完整性和一致性,同时尽可能减少并发操作之间的冲突。不同的隔离级别提供了不同的并发性和一致性保证,选择适当的隔离级别取决于具体的应用需求。
3.概括总结
3.1 读操作
| 隔离级别 | 描述 | 对读操作的影响 |
|---|---|---|
| 读未提交 | 允许读取未提交的数据,可能导致脏读。 | 可能读取到其他事务尚未提交的数据。 |
| 读已提交 | 只能读取已提交的数据,避免脏读。 | 读取的都是已提交的数据,可能出现不可重复读。 |
| 可重复读 | 保证在同一事务中多次读取结果一致,避免不可重复读。 | 事务开始后,其他事务的修改在当前事务中不可见,直到事务结束。 |
| 可串行化 | 强制事务按顺序执行,避免幻读,降低并发性。 | 读操作可能会被锁定,导致更多的锁争用和等待。 |
3.2 写操作
| 影响因素 | 描述 |
|---|---|
| 数据的一致性 | 事务保证写操作的原子性,确保数据的一致性。 |
| 隔离级别的影响 | 不同隔离级别影响写操作的可见性和锁的使用。 |
| 锁机制 | 写操作通常对数据行加锁,防止并发修改,避免更新丢失。 |
| 性能影响 | 高隔离级别可能导致锁争用,影响并发性能。 |
| 死锁 | 高并发环境可能导致事务间死锁,MySQL 会中止一个事务解决死锁。 |
| 持久性 | 事务提交后,写操作结果持久化,系统崩溃不会丢失数据。 |
浙公网安备 33010602011771号