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 员工表.性别='女'

MySQL实战45讲 3

事务隔离的实现

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

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

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

MySQL实战45讲 3

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

什么时候才不需要了呢?就是当系统里没有比这个回滚日志更早的 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

Original: https://www.cnblogs.com/ydssx7/p/16497345.html
Author: ydssx
Title: MySQL实战45讲 3

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621056/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 07 sql函数

    函数:切记函数和括号要紧密相连内置函数1.算术函数abs mod roundmax min avg sum count 这几个为聚集函数,特别在分组中常用 select abs(-…

    数据库 2023年6月16日
    072
  • SpringMvc(四)- 下载,上传,拦截器

    1、图片下载 图片下载:将服务器端的文件以流的形式写到客户端,通过浏览器保存到本地,实现下载; 1.1 图片下载步骤 1.通过session获取上下文对象(session.getS…

    数据库 2023年6月16日
    065
  • git本地分支推送至远程分支

    1、本地任意盘→新建文件夹,例:我新建文件夹名称是:E:\git 2、打开git文件夹,文件夹内鼠标右击选择 Git Bash Here 3、克隆远程分支到本地分支【远程分支移动到…

    数据库 2023年6月14日
    0157
  • 普通 Docker 与 Kubernetes 对比

    Docker提供基本容器管理 API 和容器镜像文件格式Kubernetes 管理运行容器的(物理或虚拟)主机群集,如果 Docker 是 OCP 的”内核&#8221…

    数据库 2023年6月14日
    072
  • innobackupex备份源码解析

    目前MySQL的物理备份大多数采用xtrabackupex进行,其备份过程如下图所示,这里通过解析 xtrabackup 的源码来详细看看其是如何进行备份的,xtrabackup …

    数据库 2023年6月9日
    0104
  • Maven配置私有仓库

    前言 当公司或个人具有自己独有的jar时,不想公开,一般就会放在自己的私有Maven仓库中,在项目中需要引用,此时就需要将公司私有仓库配置到maven当中,一般我们的maven配置…

    数据库 2023年6月16日
    0144
  • SNMP基础简介

    近来,公司产品开发涉及到SNMP方面的知识, 在此作一些总结,或许对您现在或者将来有用。 在目前越来越复杂的网络环境中,整个环境有各种各样的网络设备,为了能更好的对这些设备进行管理…

    数据库 2023年6月11日
    083
  • haproxy服务部署

    haproxy haproxy 一、haproyx是什么 二、负载均衡类型 三、部署haproxy 1.源码部署haproxy 2.Haproxy搭建http负载均衡 一、hapr…

    数据库 2023年6月14日
    0108
  • leetcode 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树(简单)

    一、题目大意 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node…

    数据库 2023年6月16日
    086
  • 从零开始搭建高可用的k8s集群

    一、环境准备 使用Hyper-V虚拟机功能搭建三台Centos虚拟机系统,配置好静态IP,分别为k8s-node1(192.168.0.8),k8s-node2(192.168.0…

    数据库 2023年6月14日
    088
  • ansible-复制模块

    简介:临时的,在ansible中是指需要快速执行的单条命令,并且不需要保存的命令。对于复杂的命令则为 playbook。 1、复制模块 可在终端执行ansible-doc copy…

    数据库 2023年6月14日
    084
  • 当你想静下来的时候,你就可以静下来。

    当你想静下来的时候,你就可以静下来。1,2年前,我有时还在为当时选的专业恼悔,因为继续教育是同事推荐的,最后同事给我的消息是,他在疫情后去其他公司,做人工智能的公司,拿月薪20K,…

    数据库 2023年6月11日
    089
  • MYSQL的Java操作器——JDBC

    在学习了Mysql之后,我们就要把Mysql和我们之前所学习的Java所结合起来 而JDBC就是这样一种工具:帮助我们使用Java语言来操作Mysql数据库 JDBC简介 首先我们…

    数据库 2023年6月14日
    076
  • 13 数组有没有 length()方法 String 有没有 length()方法

    数组没有length()方法,有length属性; String有length()方法。 注意:在JavaScript中,获得字符串长度是通过length属性得到的,这一点请不要和…

    数据库 2023年6月6日
    085
  • 2022-8-17 mysql 第三天

    子查询 按照结果集的行列数不同,子查询可以分为以下几类: 标量子查询:结果集只有一行一列(单行子查询) 列子查询:结果集有一列多行 行子查询:结果集有一行多列 表子查询:结果集多行…

    数据库 2023年6月14日
    079
  • 关于.net6项目发布到docker(nginx)踩到的一些坑

    开发环境:桌面云系统(无法使用docker desktop),win10系统 后端开发工具:vs2022 数据库:mysql 缓存:redis 队列和事件处理:rabbitmq 前…

    数据库 2023年6月9日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球