参考资料:https://juejin.cn/post/6905794080689618958

1.对读操作的影响

事务主要用于保证一组 SQL 操作的原子性、一致性、隔离性和持久性(ACID 属性)。当开启事务时,对读操作的影响主要体现在隔离级别上。 MySQL 支持以下几种事务隔离级别:

  1. 读未提交(Read Uncommitted)

    • 事务中的修改,即使未提交,其他事务也能看到。这可能导致脏读问题。
    • 对读操作影响:可能读取到其他事务尚未提交的数据。
  2. 读已提交(Read Committed)

    • 事务只能看到其他事务已提交的修改,避免了脏读问题。
    • 对读操作影响:读取的都是已提交的数据,但可能会出现不可重复读,即同一事务中的多次读取可能得到不同的结果。
  3. 可重复读(Repeatable Read)

    • 确保在同一个事务中多次读取同一数据行的结果是一致的(即避免了不可重复读)。
    • 对读操作影响:在事务开始后,其他事务的修改在当前事务中不可见,直到事务结束。这是 MySQL 的默认隔离级别。
  4. 可串行化(Serializable)

    • 强制事务按顺序执行,避免了幻读,但代价是降低了并发性。
    • 对读操作影响:可能导致更多的锁争用和等待,因为读操作会被转化为锁定读取。

 

 

在开启事务后,读操作的行为将取决于当前设置的事务隔离级别。高隔离级别通常意味着更高的安全性和一致性,但可能会降低系统的并发性能。

 

2.对写操作的影响

开启事务对写操作的影响主要体现在数据一致性和并发控制方面。事务的隔离级别会影响写操作的行为和性能。以下是 MySQL 事务对写操作的影响:

  1. 数据的一致性

    • 事务保证了写操作的原子性,即要么全部成功,要么全部失败。这样可以确保数据的一致性。
  2. 隔离级别的影响

    • 不同的隔离级别对写操作有不同的影响,主要体现在对其他事务的可见性和锁的使用上。
  3. 锁机制

    • 写操作通常会对涉及的数据行加锁,以防止其他事务同时修改相同的数据。这种锁机制可以防止更新丢失和其他并发问题。
  4. 性能影响

    • 高隔离级别可能导致更多的锁争用,从而影响系统的并发性能。例如,在“可串行化”级别下,事务会按顺序执行,可能导致写操作等待时间增加。
  5. 死锁

    • 在高并发环境中,多个事务可能会因为相互等待资源而导致死锁。 MySQL 会检测到这种情况并中止其中一个事务以解决死锁。
  6. 持久性

    • 一旦事务提交,写操作的结果会被永久保存,即使系统崩溃也不会丢失。

在 MySQL 中,事务对写操作的主要目标是确保数据的完整性和一致性,同时尽可能减少并发操作之间的冲突。不同的隔离级别提供了不同的并发性和一致性保证,选择适当的隔离级别取决于具体的应用需求。

 

3.概括总结

3.1 读操作

隔离级别描述对读操作的影响
读未提交 允许读取未提交的数据,可能导致脏读。 可能读取到其他事务尚未提交的数据。
读已提交 只能读取已提交的数据,避免脏读。 读取的都是已提交的数据,可能出现不可重复读。
可重复读 保证在同一事务中多次读取结果一致,避免不可重复读。 事务开始后,其他事务的修改在当前事务中不可见,直到事务结束。
可串行化 强制事务按顺序执行,避免幻读,降低并发性。 读操作可能会被锁定,导致更多的锁争用和等待。

3.2 写操作

影响因素描述
数据的一致性 事务保证写操作的原子性,确保数据的一致性。
隔离级别的影响 不同隔离级别影响写操作的可见性和锁的使用。
锁机制 写操作通常对数据行加锁,防止并发修改,避免更新丢失。
性能影响 高隔离级别可能导致锁争用,影响并发性能。
死锁 高并发环境可能导致事务间死锁,MySQL 会中止一个事务解决死锁。
持久性 事务提交后,写操作结果持久化,系统崩溃不会丢失数据。
posted on 2025-02-08 11:16  卡米i  阅读(35)  评论(0)    收藏  举报