Mysql实战45讲 百度网盘_mysql实战45讲百度云

Mysql实战45讲 百度网盘_mysql实战45讲百度云MySQL实战45讲 3

MySQL实战45讲 3

03 | 事务隔离:为什么你改了我还看不见?

事务 Transaction TRX

事务就是要保证一组数据库操作,要么全部成功,要么全部失败

MySQL 原生的 MyISAM 引擎不支持事务

隔离性与隔离级别

SQL 标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(serializable )。Mysql默认为可重复读。

在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。

CREATE VIEW ygb_view AS SELECT * FROM 员工表 WHERE 员工表.性别=‘女’

image

事务隔离的实现

在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。

假设一个值从 1 被按顺序改成了 2、3、4,在回滚日志里面就会有类似下面的记录。当前值是 4,但是在查询这条记录的时候,不同时刻启动的事务会有不同的 read-view。如图中看到的,在视图 A、B、C 里面,这一个记录的值分别是 1、2、4,同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)。

即使现在有另外一个事务正在将 4 改成 5,这个事务跟 read-view A、B、C 对应的事务是不会冲突的。

image

系统会判断,当没有事务再需要用到这些回滚日志时,回滚日志会被删除。

什么时候才不需要了呢?就是当系统里没有比这个回滚日志更早的 read-view 的时候。

有些客户端连接框架会默认连接成功后先执行一个 set autocommit=0 的命令。这就导致接下来的查询都在事务中,如果是长连接,就导致了意外的长事务

尽量不要使用长事务:

  • 长事务意味着系统里面会存在很老的事务视图。由于这些事务随时可能访问数据库里面的任何数据,所以这个事务提交之前,数据库里面它可能用到的回滚记录都必须保留,这就会导致大量占用存储空间
  • 除了对回滚段的影响,长事务还占用锁资源,也可能拖垮整个库

事务的启动方式

MySQL 的事务启动方式:

  • 显式启动事务语句, begin 或 start transaction。配套的提交语句是 commit,回滚语句是 rollback。
  • set autocommit=0,这个命令会将这个线程的自动提交关掉。意味着如果你只执行一个 select 语句,这个事务就启动了,而且并不会自动提交。这个事务持续存在直到你主动执行 commit 或 rollback 语句,或者断开连接。

正确做法:

在 autocommit 为 1 的情况下,用 begin 显式启动的事务,如果执行 commit 则提交事务。如果执行 commit work and chain,则是提交事务并自动启动下一个事务,这样也省去了再次执行 begin 语句的开销。

可以在 information_schema 库的 innodb_trx 这个表中查询长事务


select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60

原文地址:https://www.cnblogs.com/ydssx7/archive/2022/07/20/16497345.html

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

(0)
上一篇 2023-05-27
下一篇 2023-05-27

相关推荐

  • Python数字大小比较操作符

    Python数字大小比较操作符在Python中,我们可以使用以下操作符对数字进行比较:

    2024-03-22
    91
  • 云小课|MRS基础原理之CarbonData入门[亲测有效]

    云小课|MRS基础原理之CarbonData入门[亲测有效]阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要:CarbonDat

    2023-06-12
    145
  • MySQL8.0 InnoDB并行执行[亲测有效]

    MySQL8.0 InnoDB并行执行[亲测有效]概述 MySQL经过多年的发展已然成为最流行的数据库,广泛用于互联网行业,并逐步向各个传统行业渗透。之所以流行,一方面是其优秀的高并发事务处理的能力,另一方面也得益于MySQL丰富的生态。MySQL在

    2023-01-30
    169
  • pycharm安装后打不开的解决方法

    pycharm安装后打不开的解决方法PyCharm是一款专业的Python集成开发环境(IDE),方便而强大,是Python开发者的重要工具之一。但是有些时候,在安装PyCharm后,可能会遇到无法启动的问题,尤其是新手们,很容易被这个问题卡住甚至无从下手。本文将从多个方面为大家介绍PyCharm安装后打不开的解决方法。

    2024-09-18
    20
  • OLAP引擎:基于Presto组件进行跨数据源分析

    OLAP引擎:基于Presto组件进行跨数据源分析Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节,Presto虽然具备解析SQL的能力,但它并不属于标准的数据库范畴。

    2023-04-13
    166
  • Oracle行结果合计的实现

    Oracle行结果合计的实现Oracle行结果合计的实现,主要应用于日期结果的集计,下面是具体的实现代码。 With AA as ( select 'A' tNo , 10 B from dual union s

    2023-01-31
    154
  • Python中的and和or用法

    Python中的and和or用法在Python中,and和or是逻辑运算符。and运算符是指两个条件同时成立,结果为True;or运算符是指两个条件中有一个成立,结果为True。

    2024-06-27
    47
  • Mysql客户端的安装「建议收藏」

    Mysql客户端的安装「建议收藏」Mysql数据库(简称)属于C/S架构,正常工作中一般都会提供服务端,我们只需要安装客户端进行查询修改数据等操作即可。 正常工作中不管是测试人员或者开发人员,一般数据库的管理员(测试负责人或者开发负责

    2023-05-02
    142

发表回复

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