面试题:事务并发可能会导致哪些问题,数据库的隔离级别有哪些,mysql默认的是哪种级别,这种默认的隔离级别能够避免哪些问题(阿里面试题)
一、如果不考虑隔离性,事务存在3种并发访问问题
1、脏读:B事务读取到了A事务尚未提交的数据
2、不可重复读:一个事务中两次读取的数据的内容不一致
3、幻读/虚读:一个事务中两次读取的数据的数量不一致
二、数据库的隔离级别
1、read uncommitted : 读未提交 :哪个问题都不能解决
2、read committed:读已提交 :可以解决脏读 —- oracle默认的
3、repeatable read:可重复读:可以解决脏读和不可重复读 —mysql默认的
4、serializable:串行化:可以解决脏读不可重复读和虚读—相当于锁表
三、数据库的隔离级别实现原理
1、read uncommitted : 读未提交:
事务对当前被读取的数据不加锁;
事务在更新某数据的瞬间,必须先对其加行级共享锁,直到事务结束才释放。
表现:
① 事务1读取某行记录时,事务2也能对这行记录进行读取、更新(因为事务一并未对数据增加任何锁)
② 当事务2对该记录进行更新时,事务1再次读取该记录,能读到事务2对