面试题答案
一键面试常见隔离性问题
- 脏读:一个事务读取到另一个未提交事务修改的数据。比如事务A修改了某数据但未提交,事务B此时读取到了这个未提交的修改数据。
- 不可重复读:在同一个事务内,多次读取同一数据返回的结果不一致。例如事务A先读取一次数据,事务B随后修改并提交了该数据,事务A再次读取时得到了不同结果。
- 幻读:在一个事务内,按照相同查询条件多次读取数据,第二次读取比第一次读取多出了一些数据行(类似幻觉)。比如事务A按条件查询数据,事务B插入了满足该查询条件的新数据行并提交,事务A再次查询就会多读到这些新数据。
常见基础解决方案及其原理
- 两阶段提交(2PC)
- 原理:分为准备阶段(Prepare)和提交阶段(Commit)。在准备阶段,协调者向所有参与者发送事务预提交请求,参与者执行事务操作并记录日志,但不真正提交。然后向协调者反馈“准备就绪”或“失败”。如果所有参与者都“准备就绪”,协调者进入提交阶段,向所有参与者发送提交请求,参与者正式提交事务;若有任何一个参与者反馈“失败”,协调者则向所有参与者发送回滚请求,参与者回滚事务。
- TCC(Try - Confirm - Cancel)
- 原理:Try阶段,资源的预留和锁定,完成所有业务检查(一致性),预留必须业务资源(准隔离性)。Confirm阶段,真正执行的业务操作,不做任何业务检查,只使用Try阶段预留的业务资源,因此Confirm阶段需满足幂等性。Cancel阶段,释放Try阶段预留的业务资源,同样需满足幂等性。