当前位置:首页 > 科技 > 正文

浅谈mysql事务隔离级别

mysql事务隔离级别是面试过程中几乎必问的,很少有候选人能完美回答。浅谈下鄙人对mysql事务隔离级别的理解,如果错误,欢迎指正!

mysql事务隔离级别分为四种:

1.未提交读(READ UNCOMMITTED):根据字面意思可以理解为事务中发生了修改,即使没有提交,其他事物也是能读取的。比如:A修改了学生成绩,但还没有提交,这时B事物看到了这个修改的成绩,而这时候A回滚了成绩,B看到的还是修改的成绩。

那么考考各位看官,上面这种情况属于脏读还是幻读?

2.已提交读(READ COMMITTED):从字面意思理解为事务提交之后,其他事务才能读取。比如:一个数A原来是50,然后提交修改成100,这个时候另一个事务在A提交修改之前,读取的A是50,刚读取完,A就被修改成100,这个时候另一个事务再进行读取发现A就突然变成100。

上面这种情况属于脏读还是幻读?

3.可重复读(REPEATABLE READ):根据字面意思理解为每次读取到的都是一样的。比如:一个数A读取的话一直是A,前后两次读取的A是一致的。可以阻止脏读和不可重复读,但幻读仍有可能发生。

4.可串行化(SERIALIZABLE):在并发情况下,串行化每次读取的结果是一致的。比如:一个数A每次读取都是A,不会发生改变。该级别可以防止脏读、不可重复读以及幻读。

下表显示每种隔离级别可能会出现的情况:

隔离级别

脏读

不可重复读

幻读

未提交读 READ UNCOMMITTED

已提交读 READ COMMITTED

×

可重复读 REPEATABLE READ

×

×

可串行化 SERIALIZABLE

×

×

×

有话要说...

推荐阅读