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


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

    脏读

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

    不可重复读

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

    幻读

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

    同时存在两个事务:事务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凌晨生效)

  • 相关阅读:
    基于网络监听方式的电子邮件实现基础
    在一个存储过程里面执行另一个存储过程的应用
    Vim复制单个字符
    Linux下fsck修复文件系统
    (转载)2011年金山软件C++开发工程师笔试题 关于逆序输出
    (转载)C++ string详解
    (转载)Linux下网络API
    (转载)软中断和硬中断
    (转载)找工作经历总结百度offer
    (转载)Vim入门图解说明
  • 原文地址:https://www.cnblogs.com/lurker-yaojiang/p/13407560.html
Copyright © 2020-2023  润新知