两道常见的mysql面试题 4.10

事务的4个特性(ACID)

  • 原子性(A):事务是最小的执行单位,不可以被分割,动作要么全部完成,要么完全不起作用。

  • 一致性(C):执行事务前后,数据保持一致。比如转账事务中,不论事务是否成功,转账者和收款人钱的总额是不变的。

  • 隔离性(I):并发访问数据库时,一个用户的事务不会被其他事务所干扰,各个并发事务之间,数据库是相互独立的。

  • 持久性(D):一个事务被提交后,它对数据库的影响是持久的,即使数据库发生故障也不应该对其有影响。

事务的原子性、隔离性、持久性是为了保证事务的一致性。

事务的4种隔离级别

SQL 标准定义了四个隔离级别:

  • READ-UNCOMMITTED(读未提交):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、不可重复读和幻读。
  • READ-COMMITTED(读已提交):允许读取并发事务已经提交的数据,可以阻止脏读,但是不可重复读和幻读仍有可能发生。
  • REPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • **SERIALIZABLE(串行化)**:最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

这里补充脏读、不可重复读和幻读:

  • 脏读:读取其他事务尚未提交的数据变更
  • 不可重复读:在同一事务中,对非自己修改的数据的两次读取结果不同
  • 幻读:在一个事务读取了几行数据,接着另一个并发事务插入了一些数据,在随后的查询中,第一个事务就会发现多了一些原本不存在的记录

在可重复读的隔离级别下,是可以解决一部分幻读问题的:

  • 给事务操作的这张表添加表锁或者 Next-key Lock

两道常见的mysql面试题 4.10
https://jlqusername.github.io/2025/04/10/两道常见的mysql面试题 4.10/
作者
B907
发布于
2025年4月10日
许可协议