事务隔离(3)「终于解决」

事务隔离(3)「终于解决」事务 保证一组数据库操作,要么全部成功,要么全部失败。 特性 原子性: 一致性: 隔离性: 持久性: 当数据库中有多个事务同时执行的时候,就可能出现脏读( )、不可重复读( )、幻读( )的问题,为了

事务隔离(3)

事务

保证一组数据库操作,要么全部成功,要么全部失败。

ACID特性

  • 原子性:Atomicity
  • 一致性:Consistency
  • 隔离性:Isolation
  • 持久性:Durability

当数据库中有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。隔离的越严实,效率就会越低,需要在两者之间找一个平衡点。

事务隔离级别
隔离级别:串行化 > 可重复读 > 读提交 > 读未提交

  • 读未提交:read uncommitted,一个事务还没提交时,它做的变更就能被别的事务看到。会导致“脏读”、“幻读”、“不可重复读”。
  • 读提交:read committed,一个事务提交之后,它做的变更才会被其他事务-看到。避免了“脏读”,但不能避免“幻读”和“不可重复读”。
  • 可重复读:repeatable read,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据时一致的。当然在可重复读的隔离级别下,未提交变更对其他事务也是不可见的,MySQL的默认级别。 避免了“脏读”和“不可重复读”,但不能避免“幻读”。
  • 串行化:serializable,对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。能比秒“脏读”、“幻读”、“可重复读”。

不同事务级别带来的并发问题

  • 脏读:读取到了别的事务回滚前的脏数据。事务A读取了被另一个事务B修改,但是还未提交的数据。假如事务B回退,则事务A读取的是无效数据。
  • 不可重复读:当前事务进行了一次数据读取,然后再次读取的数据是别的事务修改成功的数据,导致两次读取到的数据不匹配
  • 幻读:当两个完全相同的查询执行时,第二次查询所返回的结果集和第一个查询的不相同。

MVVC概念
Multi-Version Concurrency Cotrol,多版本并发控制,直白的意思是同一份数据临时保留多个版本,进而实现并发控制。
MySQL中建表时,每个表都会有三列隐私字段,其中和MVCC有关系的有两列:

  • 数据行的版本号(DB_TRX_ID
  • 删除版本号(DB_ROLL_PT
    每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9287.html

(0)
上一篇 2023-02-11
下一篇 2023-02-11

相关推荐

  • MYSQL 高级「建议收藏」

    MYSQL 高级「建议收藏」SQL查询流程: 1. 通过客户端/服务器通信协议与 MySQL 建立连接 2. 查询缓存,这是 MySQL 的一个可优化查询的地方,如果开启了 Query Cache 且在查询缓存过程中查 询到完全

    2023-04-16
    157
  • 【赵强老师】什么是Redis Cluster

    【赵强老师】什么是Redis Cluster(一)什么是Redis Cluster? Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等

    2023-02-15
    151
  • 实现Python和JavaScript字符串以给定字符串开始的判断函数

    实现Python和JavaScript字符串以给定字符串开始的判断函数字符串以给定字符串开头的判断,可以通过比较字符串的前若干个字符和给定字符串是否相等来实现。在Python中可以使用字符串切片(slicing)或字符串的方法startswith()来实现,而在JavaScript中可以使用字符串的方法slice()或startsWith()来实现。

    2024-01-19
    102
  • 使用Python的StringIO创建标题

    使用Python的StringIO创建标题在python中,可以使用StringIO模块来创建一个类文件对象。类文件对象的作用与普通文件对象一样,都可以进行读写操作。使用StringIO模拟文件操作很常见,特别是在测试环境下。

    2024-06-06
    63
  • NSS支持的数据库「建议收藏」

    NSS支持的数据库「建议收藏」NSS,简写自Name Service Switch。我把它译为“名字服务中心”。 在*nix操作系统中,NSS是C语言库(Library C或者glibc)的一部分,用以寻找名字。比如说,我们运行…

    2022-12-17
    142
  • [mysql]Truncated incorrect DOUBLE value[通俗易懂]

    [mysql]Truncated incorrect DOUBLE value[通俗易懂]1292 – Truncated incorrect DOUBLE value: '1-收费站', Time: 0.013000s 搞不懂,搞了很久。 解决: and b.sta…

    2022-12-16
    186
  • Python列表去重

    Python列表去重在Python编程中,我们经常需要处理数据列表。但是,有时同一个数据会被重复添加进入列表,这会影响我们对数据的处理和分析。因此,去重是很常见的需求。Python中提供了多种方法来实现列表去重,本文将为您详细介绍Python列表去重的几种方法。

    2024-06-16
    52
  • 开源hadoop系统搭建_hadoop技术

    开源hadoop系统搭建_hadoop技术一、直播介绍 上期雅泽同学对ChengYing是什么、有什么样的功能特性,如何快速入门做了介绍,本期海洋同学将会为大家分享ChengYing部署Hadoop集群实战的相关内容,欢迎大家积极参与。 二、

    2023-05-29
    139

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注