浅谈mysql事务隔离级别
- 科技
- 2022-05-11 14:14
- 301
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
×
×
×
有话要说...