两道常见的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/