事务未提交 别人能读取到吗_一些关于事务隔离性的理解

关于脏读、不可重复读与幻读

脏读

指是否能够读取到其他事务未提交的数据。如果能读取到,则称为脏读。

不可重复读

相对于某个已经开始的事务而言,该事务对某个数据的多次读取是否与事务开始时读取到的值一致。如果该事务多次读取某个数据时都能读取到相同的值,则称为可重复读;否则称为不可重复读。

幻读

相对于某个已经开始的事务而言,出现的场景是在事务中需要对某个数据进行读取,并以此为基础对该数据进行修改(修改指新增行、删除行、修改值等)。举个例子:

同时存在两个事务:事务A和事务B。事务A负责将变量a=1逐步递增到10,与此同时,事务B读取到a=1。在事务B读取到a的值之后,发起了一个修改操作 ” update a = 11 where a = 1 ",此时事务B尚未提交。然后事务B在事务A提交之后执行提交,此时发现得到结果 affect rows = 0,修改操作失败。这就好像感觉之前读取数据时发生了幻觉一样,人家数据是10,我看成了1,少看了一个0?

四个事务隔离级别

读未提交

b559b50f90fcb4ab3b08d771ba72a231.png

读已提交

9ce035c81619e5c69ecba5e30c221fe4.png

可重复读

a788fc0d87880cafaafe6742ccc4bebc.png

串行化

串行化是最严格的事务隔离级别,事务只能一个接一个地执行,不能并发执行。如同时存在事务A,事务B,事务C,那么必须按照一定的顺序,如事务A => 事务B => 事务C 依次执行。

主要内容总结

事务隔离性,是指在并发环境中,不同事务并发操作相同的数据时,每个事务都有各自完整的数据空间,并发执行的各个事务之间不能相互影响。

在标准SQL规范中定义了四个事务隔离级别,其分别是:

隔离级别脏读不可重复读幻读
读未提交
读已提交×
可重复读××
串行化×××

如果我的文章对你有帮助,欢迎你关注我的微信公众号,如有错误,也请指出。你的关注是我写作的动力。(PS:公众号已更名为 “洮渚的进阶札记” 2020-8-1凌晨生效)

46b74105ef6611ed106f8adacdfb2ef2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值