典型回答:
MySQL数据库事务隔离级别分为四个不同层次:
读未提交: 一个事务能够读取其他事务未提交的修改的数据,这是最低的隔离水平,允许脏读出现。
脏读的场景:
读已提交: 一个事务能够读取其他事务已经提交的修改的数据,脏读不会出现。但是隔离级别比较低,允许出现不可重复读和幻象读。
不可重读的场景:
可重复读:一个事务读取到另一个事务已经提交的数据,隔离级别比较高,允许出现幻读。这也是MySQL InnoDB引擎的默认隔离级别,但是和一些其他的数据库不同,可以简单的认为MySQL在可重复读级别不会出现幻读。
幻读的场景:
串行化: 并发事务之间是串行化的,通常意味着读取需要共享读锁,更新需要获取排他写锁。这是最高的隔离级别。不可重复读和幻读到底有什么区别呢?
(1)不可重复读是读取了其他事务更改的数据,针对update操作解决:使用行级锁,锁定该行,事务A多次读取操作完成后才释放该锁,这个时候才允许其他事务更改刚才的数据。
(2)幻读是读取了其他事务新增的数据,针对insert操作解决:使用表级锁,锁定整张表,事务A多次读取数据总量之后才释放该锁,这个时候才允许其他事务新增数据。