一些关于事务隔离性的理解

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

脏读

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

不可重复读

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

幻读

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

同时存在两个事务:事务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?

四个事务隔离级别

读未提交

读已提交

可重复读

串行化

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

主要内容总结

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

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

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

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

posted on 2020-07-31 03:24  洮渚  阅读(622)  评论(0编辑  收藏  举报

导航