面试题答案
一键面试- 脏读
- 问题阐述:一个事务读取到另一个未提交事务修改的数据。
- 产生原因:在并发环境下,当一个事务对数据进行修改但未提交时,另一个事务就可以读取到这些未提交的数据。例如事务A修改了某条记录但未提交,事务B此时读取该记录,若事务A随后回滚,事务B读取到的数据就是无效的“脏”数据。
- 不可重复读
- 问题阐述:在同一个事务内,多次读取同一数据返回的结果不一致。
- 产生原因:在事务执行过程中,其他事务对该数据进行了修改并提交。例如事务A读取某条记录,之后事务B修改并提交了该记录,当事务A再次读取该记录时,得到的结果与第一次读取时不同。
- 幻读
- 问题阐述:在一个事务内,按照相同的查询条件多次读取,得到的记录数不一致。
- 产生原因:其他事务在该事务执行过程中插入或删除了满足查询条件的记录。例如事务A根据某个条件查询出一定数量的记录,之后事务B插入了满足该条件的新记录,当事务A再次按照相同条件查询时,得到的记录数增多了;或者事务B删除了满足条件的记录,事务A再次查询记录数减少。这就像出现了“幻影”一样。
- 死锁
- 问题阐述:两个或多个事务相互等待对方释放锁资源,形成僵持局面。
- 产生原因:假设事务A持有资源X的锁,想要获取资源Y的锁;事务B持有资源Y的锁,想要获取资源X的锁。此时双方都在等待对方释放锁,从而陷入死锁。在使用B + 树索引时,由于索引结构的特性,不同事务对索引节点和数据页的访问顺序不同,可能导致这种相互等待锁的情况发生。