【四种隔离级别详解】

本文详细讲解了数据库隔离级别的四个层次:读未提交允许脏读,读已提交避免脏读但有不可重复读,可重复读解决脏读和不可重复读但有幻读,串行化提供最强安全性但牺牲并发。理解这些差异有助于优化事务处理和避免数据一致性问题。
摘要由CSDN通过智能技术生成

读未提交

read uncommitted
未提交别人也能看得到
假如A事务和B事务对同一张表进行操作,B事务进行了DML语句,但没有提交(commit)或者回滚(rollback),此时A事务便可以查看到B事务还没有提交的数据,就是保存在事务性活动的日志文件中的数据。这样可能会造成脏读。何为脏读:脏读就是B事务还没有提交的数据,A事务便可以查看到,在用户的眼里,A用户就会以为这条数据已经存在了,其实还没有提交,如果提交失败,便会回滚,这条数据并没有添加成功,而A用户却以为成功了。

读已提交

read committed
未提交别人看不到,提交之后别人才看得到
假如A事务和B事务对同一张表进行操作,B事务进行了DML语句,但没有进行提交,那么A事务是读取不到的,它解决了脏读,但是出现了不可重复读

可重复读

repeatable read
A事务只要不提交,无论B事务提交与否,每次读到的内容一致:解决了脏读、不可重复读,但会造成幻影读(幻读),数据不够真实。mysql中默认的事务隔离级别就是这个。
只要自己不提交,就读不到别人更新的数据

串行化

serializable
这个隔离级别是最高级别,效率最低,但是**非常安全,不能并发,**俩个事务不能对同一张表进行操作,需要等待A事务操作完之后,B事务才能进行操作。每次读取的数据都是最真实的。


读已提交和可重复读的区别

可重复读是沿袭了读已提交并让事务隔离级别更高:

    读已提交是A事务本身不用提交,就能读取到B事务修改并提交事务的数据,当然,A提交事务自然也是能读取B修改后的数据的;

    可重复读对此基础上,要求A也必须提交事务,才能读取到B修改并提交事务的数据,若A在B修改并提交事务后没有提交事务就去读取,每次的结果都是一样的,但实际B事务已对数据做出成功修改(硬盘中的文件数据以改变),A事务读到的都是备份数据,总感觉出现了幻觉,所以叫幻读!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值