事务隔离(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

相关推荐

  • linux下mysql默认安装目录[亲测有效]

    linux下mysql默认安装目录[亲测有效]1、数据库目录 /var/lib/mysql/ 2、配置文件 /usr/share/mysql(mysql.server命令及配置文件)mysql5.5之后的默认安装路径,mysql5.5之前的是/…

    2023-02-12
    109
  • Cassandra 简介「终于解决」

    Cassandra 简介「终于解决」Cassandra是云原生和微服务化场景中最好的NoSQL数据库。我信了~ 1. Cassandra是什么 高可用性和可扩展的分布式数据库 Apache Cassandra™是一个开源分布式数据,可提

    2023-02-26
    109
  • 利用Python NumPy进行数据切片操作

    利用Python NumPy进行数据切片操作NumPy是Python中的数学库,它提供了高性能的大型多维数组和矩阵运算。NumPy对于科学计算和数据分析非常有用,可以简化复杂数据的处理过程。

    2024-04-07
    26
  • Python程序员: 用代码实现你想要的功能

    Python程序员: 用代码实现你想要的功能随着互联网的发展,代码已经渐渐成为了一个人在信息时代中的必备技能之一。而Python作为一种简单易学、功能丰富的编程语言,已经成为了各行各业中广泛使用的工具。Python程序员可以用代码实现各种各样的功能:爬取网页数据、解析数据、制作数据可视化图表等等。Python程序员可以做的事情多种多样,本文将介绍几个常见的方面。

    2024-02-11
    47
  • mysql 多表关联查询如何加快速度_多表关联查询还会走索引吗

    mysql 多表关联查询如何加快速度_多表关联查询还会走索引吗这个问题出现在多表关联时, 如一张商品表,其中的单位的字符串表示是在单位表中, 但这个单位的id之后进行了删除,并且不再奏效。 如下: select * from (select pg0.id,pg0

    2023-05-16
    94
  • postgres安装中文分词插件[通俗易懂]

    postgres安装中文分词插件[通俗易懂]一 安装SCWS 1. 下载 scws [root@node181 hongcq]# wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.b…

    2023-01-30
    133
  • pikachu之sql(9)「终于解决」

    pikachu之sql(9)「终于解决」这是盲注的另一种延时注入,这种比刚才更难, 布尔盲注还可以看到页面是否正确来判断注入的SQL语句是否成功执行, 而延时注入就什么返回信息都看不了了。 我们只能通过布尔的条件返回值来执行sleep()…

    2023-04-05
    116
  • 使用Python计算圆周率的平方根

    使用Python计算圆周率的平方根圆周率(π)是一个几何常数,它代表了一个圆的周长与其直径的比值,通常近似值为3.14。圆周率的平方根是指其平方根的值,通常表示为√π。圆周率的平方根在数学和物理学中广泛应用,如波长、频率、圆柱体表面积、球体体积和质量等。

    2024-02-08
    50

发表回复

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