暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

事务的隔离级别和对应的问题

533
  • 事务的隔离级别

    事务具有原子性,一致性,隔离性,持久性四大特性。其中隔离性是指mysql如果同时开启多个事务,不同的事务之间相互影响的程度却是有不同的等级的。


事务隔离级别:

read uncommitted(读取未提交数据):即便是事务没有commit,但是其他连接仍然能读到未提交的数据,这是所有隔离级别中最低 的⼀种。

read committed(可以读取其他事务提交的数据):当前会话只能读取到其他事务提交的数据,未提交的数据读不到。 

repeatable read(可重读)---MySQL默认的隔离级别:当前会话可以重复读,就是每次读取的结果集都相同,⽽不管其他事务有没有 提交。

serializable(串⾏化):其他会话对该表的写操作将被挂起。可以看到,这是隔离级别中最严格的,但是这样做势必对性能造成影响。


mysql中设置事务隔离级别语句

    set global transaction isolation level read uncommitted;


    read uncommitted隔离级别

    read committed隔离级别

    repeatable read隔离级别

    由于mysql中设置的隔离级别的不同,导致的问题有脏读,幻读,不可重复读。


    • 脏读,幻读,不可重复读


    问题简介

        根据数据库的不同的隔离级别,会导致事务产生不同的现象,脏读,幻读,不可重复读就分别用于描述这些现象。

        脏读:在读未提交的隔离级别下,事务2可能读取到事务1还没有提交的数据,但事务1最终可能是rollback回滚数据,导致事务2读取到的是事务1的脏数据。脏读只会出现在【读未提交】的隔离级别下。 

        幻读:事务2中先后读取某一个范围的数据时,事务1中途可能向这个范围中插入了一条数据,导致事务2先后两次读取这个范围的数据记录数量不一致的情况出现,即出现所谓的幻影行。幻读会出现在【读未提交】,【读已提交】,【可重复读】的隔离级别中。 

        不可重复读:事务2中先后读取某一条记录时,事务1中途可能修改了这条记录,导致事务2中先后读取这条记录出现不一致的情况。不可重复读出现在【读未提交】和【读已提交】的隔离级别中。


    为什么repeatable read的隔离级别下仍存在幻读问题?

        repeatable read的隔离级别的幻读只出现在更新操作中,在读取操作的时候是不会出现幻读的。因为mysql的可重复读的机制是在开启事务的时候就会生成一个快照表,所有的读取操作都是基于这个快照表来操作,但是更新操作是基于原表进行操作的,因此会导致在可重复读读隔离级别下更新操作可能出现幻读。



    关于leetcode算法训练营:

        加我微信号私聊参加训练营~

    本人用c++刷了800道左右的算法,java语言刷了600道左右的算法题,并对这些题做了详细的个人总结。本科期间系统学习了数据结构与算法课程,同时考研过程中写完了率辉主编的《2020年数据结构高分笔记》和《数据结构1000题》,看完的视频包括《mooc浙大数据结构国家精品课程》和《王道考研408数据结构课程》,《王道2019年算法题讲解视频》,最终以初试专业第三名进入了北理工软件工程专业。熟悉并掌握常见的数据结构,比如链表、数组、树、图、队列、堆栈等等,精通数据结构教材中的所有算法,比如常见的遍历算法、动态规划,递归,回溯,剪枝,并查集,最短路径,拓扑排序等等,所以快加入训练营吧,我们一起进步

    奔跑的小梁,公众号:梁霖编程工具库算法训练营,快来参加


    文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论