面试题:讲一下事务的隔离级别?
我的回答:
因为事务之间的隔离性,造成了一些问题,比如说:脏读、不可重复读和幻读(虚读)。
1.什么叫脏读?
就是一个事务读取到了另一个事务还未rollback或commit的事务中的数据。
2.什么叫不可重复读?
就是同一个事务内,多次进行读取,但是读取到的数据是不一致的。比如说:事务刚开始,读取到A账户有1000元,但是在没有对其进行操作的前提下,再次读取数据,A账户中金额变成了800元。
3.什么叫幻读?
幻读就是一个事务读取到了另外一个事务插入进来的新数据,比方说:一个事务刚开始时,读取到了三个账户A、B、C的数据。但是过了一会儿,就读取到了四个账户:A、B、C、D四个账户的数据。
数据表中,数据条数变多了。
设置事务隔离级别(从低到高):
读未提交:可以读取到其他事务还未提交的数据。(隔离级别最低,无法避免:脏读、不可重复读、幻读问题)
读已提交:只能读取到其他事务已经提交的数据。(避免了:脏读问题)
可重复读:一个事务执行过程中读取到的数据,总和这个事务开启时,读取到的数据是一致的。(避免了不可重复读的问题)
串行化:对于同一行数据,读的时候会加“读锁”,写的时候会加“写锁”,当读写冲突时,会让前一个事务先执行完,下一个事务才可以执行。(避免了:脏读、不可重复读、幻读的问题)