本文面试题题目均来自外面付费面试题,在此基础上做修改并加入了自己的理解,以确保通俗易懂,事情较多更新会很慢,对于着急面试的同学建议建议支持正版,或者需要简历项目需要可以私我Redis面试题汇总-优快云博客
1.mysql事务的四大特性
- 原子性:事务中的操作要么同时成功,要么同时失败,事务是最小的分割单元,任何失败都会引起事务回滚
- 一致性:一致性在确保事务完成后,数据从一个一致性状态转到另外一个一致状态,事务开始前后,数据库的完整性没有被破坏
- 隔离性:事物之间相互隔离,事务之间的操作互相不可见,直到事务提交
- 持久性:事务一旦提交,其结果是永久的,即使系统发生故障,数据也不会丢失
2.事务的隔离级别
- 读未提交:一个事务可以读取到另外一个未提交事务的数据,会导致脏读现象
- 读已提交:一个事务只能读取已经提交事务的数据,但是会出现不可重复读现象
- 可重复读:一个事务在整个过程中,多次读取同一个数据时,结果是相同的,但是会出现幻读现象
- 串行化:解决了所有问题,代价是并发度大大降低
2-1.脏读,幻读,不可重复读的区别
- 脏读:读取到了别的事务尚未提交的数据,如果别的事务回滚或者修改,就会导致读取到的数据是脏数据
- 不可重复读:读取的数据,可能会被别的事务修改,造成第二次读取与第一次读取的数据不同
- 幻读:一个事务在读取某个范围数据的时候,这是如果有别的事务插入一行数据,就会导致出现幻读现象
2-2.MVCC是怎么解决脏读,幻读,不可重复读的问题的
MVCC主要是通过ReadView来解决脏读问题的
每开启一个事务,该事务就会获取一个事务id,这个事务id是自增的,通过这个我们就可以盘断事务的时间顺序
- creator_trx_id 当前事务id
- low_limit_id 下一个事务id
- up_limit_id 未提交事务最小事务id