【MySQL--->事务】

文章目录

    • @[TOC](文章目录)
  • 一、基本概念
  • 二、事务的操作
    • 1.设置全局事务隔离级别
    • 2.设置事务提交方式
    • 3.事务操作
  • 三、事务隔离性
    • 1.隔离性概念
    • 2 .隔离级别设置
  • 四、MVCC多版本控制
    • 2. read view

一、基本概念

事务是由若干条具有逻辑相关性的SQL语句组成的,用来完成某种任务的**逻辑单元.**事务具有原子性,一致性,隔离性,持久性4大属性.
原子性:保证事务要么不执行,要么执行完,如果发生错误就回滚到事务发生前的状态,就跟事务没有发生一样.
一致性:保证事务执行前和执行后,数据库的完整性不会被破坏.其他事务看到的数据库是一致的,不会看到事务执行过程中的不确定的数据,一致性是由原子性保证的,与用户逻辑强相关,由用户决定,如果因为用户逻辑导致事务中有的SQL语句没有成功执行,就会造成数据库的不一致.
隔离性:事务操作的数据对于其他事务是隔离的.不会影响其他事务,也不会被其他事务影响.
持久性:事务的结果在数据库中永久有效,不会因为数据库故障被破坏.
事务存在的意义是为了方便上层应用程序的使用,有了事务,应用程序层面就不需要关系,数据库操作失败应该怎么做,并发访问数据库应该怎么做,只需要关心怎么操作数据库,操作过程中的各种问题不需要关心.简化了应用程序的编程模型.
不同的存储引擎支持事务的情况不同.MySQL只有innodb支持事务.myisam不支持事务.show engines\G可以查看存储引擎属性信息.
事务的提交方式有自动提交和手动提交两种,show variables like ‘autocommit’;语句可以查看事务提交方式ON为自动提交,OFF为手动提交set autocommit=1设置自动提交,set autocommit=0设置手动提交

二、事务的操作

1.设置全局事务隔离级别

set global transation isolation level read uncommitted 设置事务隔离级别,设置完毕需要重启终端.
select @@tx_isolation;查看事务隔离级别

2.设置事务提交方式

autocommit=0为非自动提交,1为自动提交方式
在这里插入图片描述

3.事务操作

手动启动事务begin或者start transaction
在这里插入图片描述
事务回滚savepoint 变量名,设置保存点,rollback,回滚.回滚操作可以全部回滚,也可以回滚到保存点,回滚到保存点,保存点之后的数据全部清除,保留之前的数据.
在这里插入图片描述
提交事务commit,提交之后事务就无法再回滚了,如果SQL发生异常程序退出时,SQL会自动回滚到事务开始的时候,与是否自动提交无关.
单个SQL语句也构成事务,当设置自动提交时,每条SQL语句执行完会自动提交,反之需要commit手动提交.

三、事务隔离性

1.隔离性概念

因为事务并发执行需要保持事务的原子性,保证多事务并发时不互相干扰,所以有了隔离性,因为允许事务执行时更具情况,可以收到不同程度的干扰,所有有了隔离级别.
事务隔离级别有4中,读未提交,读提交,可重复读,串行化.
脏读:一个用户事务中读到的数据是其他用户事务未提交的事务,这叫做脏读.
不可重复读, 两个事务并发执行,一个事务执行期间操作的数据因为另一个事务的提交发生了改变,导致结果出现差错叫做不可重复读.
**幻读:**在可重复读的隔离级别下,仍然可以读到新插入并且已提交的数据.
串行化:是事务级别的串行,对每个读的数据行加共享锁,插入,删除,修改都是串行的.

2 .隔离级别设置

设置全局隔离级别,会影响所有终端的隔离级别.
设置会话隔离级别,默认与全局隔离级别一致
在这里插入图片描述
在这里插入图片描述
查看隔离级别
在这里插入图片描述

四、MVCC多版本控制

概念: MVCC是用来解决读写冲突的无锁并发控制.

事务结构: 每个事务都由数据,事务id,隐式主键id,flag标志,回滚指针组成.MySQL内部还维护了一个缓冲区undo log.

flag: 使用delete删除数据不是真的删除数据,而是将数据flag设置为删除,这是出于数据恢复,删除需要移动数据等多方面考虑.

回滚操作: undo log 中存储了与实际写入操作相反的操作,回滚时,执行想反操作即可,例如实际执行insert语句,会在undo log中记录delete语句.

版本链: 每执行一条更新操作,会在undo log中记录数据项的历史版本,然后将历史版本数据项在undo log中的地址记录在已经更新的数据项的回滚指针表项中.多个历史版本就形成版本链,一个版本也叫一个快照,读历史版本也叫快照读.事务提交了,与事务相关,但是与其他

**读写操作并发执行: ** 使用读未提交隔离级别,双方都是当前读(读到的是最新的数据).如果是读提交,一个事务是当前读,一个是快照读.因为读的不是一个数据所以不用加锁,从根本上解决了幻读和脏读和不可重复读的问题.

2. read view

**概念: ** read view是事务进程快照读时创建的一个用于快照可见性判断的类,重要组成成员属性有m_low_limit_id,m_up_limit_id,m_create_trx_id,m_ids;

**m_low_limit_id: ** 高水位,表示与当前事务同时运行事务的id中最大一个事务id加1;
**m_up_limit_id: ** 低水位,表示与当前事务同时运行事务的id中最小的一个事务id;
**m_create_trx_id: ** 当前事务的id;
**m_ids: ** 与当前事务同时在运行的所有事务id;

**检查规则: ** 快照读时会用readview类中的数据对比版本链中数据,如果快照id小于低水位,说明是当前事务运行前就已经提交的数据,或者是id等于m_create_trx_id说明是当前事务的快照,应该看见.如果快照id大于等于高水位,说明该事务是在当前事务运行之后才出现的,不应该被看见.如果m_ids是空说明就当前一个事务在运行,那么所有快照都能被看见.如果快照id在m_ids中说明事务仍在活跃,不应该被看见,如果不在m_ids中说明事务已提交,可以被看见.

可重复读原理: 当事务进行快照读的时候,会创建一个readview对象,一直到当前事务结束都是用一个readview,此时与当前事务同时运行的事务的操作对于当前事务而言是不可见的,就算其他事务在当前事务执行期间结束,readview中仍然会哪些事务当做正在运行的事务,也是不可见的.

**读提交: ** 当前事务每次快照读都会创建新的readview,与当前事务同时运行的其他事务在没有提交前事务id是记录在m_ids中的,提交后当前事务再次快照读将重新创建readview,已经结束的事务id就不会出现在readview中,那么该事务的快照是可见的,就形成了读提交.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/160813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言--判断年月日是否合理

一.题目描述 比如输入2001,2,29,输出: 不合理 。因为平年的二月只有28天 比如输入2000,6,31,输出:不合理。因为6月是小月,只有30天。 二.思路分析 本题主要注意两个问…

强化学习--多维动作状态空间的设计

目录 一、离散动作二、连续动作1、例子12、知乎给出的示例2、github里面的代码 免责声明:以下代码部分来自网络,部分来自ChatGPT,部分来自个人的理解。如有其他观点,欢迎讨论! 一、离散动作 注意:本文均以…

如何使用SD-WAN提升物流供应链网络效率

案例背景 本次分享的物流供应链企业是一家国际性的大型企业,专注于提供全球范围内的物流和供应链解决方案。案例用户在不同国家和地区均设有多个分支机构和办公地点,以支持客户需求和业务运营。 在过去,该企业用户使用传统的MPLS网络来连接各…

OceanBase:04-单机在线转分布式部署

目录 1.当前部署情况 2.单Zone多OBServer模式 3.多Zone多OBServer模式 3.1 集群规划 3.2 安装OBServer程序 3.3 新增Zone 3.4 启动Zone 3.5 向Zone新增OBserver节点 3.6重复3.2~3.5新增其他Zone 4.扩充资源 OceanBase 数据库为单机分布式一体化架构,支持单…

纯干货丨电脑监控软件有哪些(三款电脑监控软件大盘点)

电脑监控软件在日常生活和工作中的应用越来越广泛。这些软件可以帮助我们监控电脑的使用情况,保护电脑的安全,提高工作效率。本文将介绍一些高人气的电脑监控软件,并分享一些纯干货。 1、 域之盾软件----电脑监控系统 是一款功能强大的电脑监…

Linux输入设备应用编程(触摸屏获取坐标信息)

上一章学习了开发板外接键盘并获取键盘的的输入 Linux输入设备应用编程(键盘,按键)-CSDN博客 本章编写触摸屏应用程序,获取触摸屏的坐标信息并将其打印出来 目录 一 触摸屏数据分析(触摸,点击&#xff…

采用connector-c++ 8.0操作数据库

1.下载最新的Connector https://dev.mysql.com/downloads/connector/cpp/,下载带debug的库。 解压缩到本地,本次使用的是带debug模式的connector库: 注:其中mysqlcppconn与mysqlcppconn8的区别是: 2.在cmakelist…

请简要说明 Mysql 中 MyISAM 和 InnoDB 引擎的区别

“请简要说明 Mysql 中 MyISAM 和 InnoDB 引擎的区别”。 屏幕前有多少同学在面试过程与遇到过类似问题, 可以在评论区留言:遇到过。 考察目的 对于 xxxx 技术的区别,在面试中是很常见的一个问题 一般情况下,面试官会通过这类…

SpringBoot监听器解析

监听器模式介绍 监听器模式的要素 事件监听器广播器触发机制 SpringBoot监听器实现 系统事件 事件发送顺序 监听器注册 监听器注册和初始化器注册流程类似 监听器触发机制 获取监听器列表核心流程: 通用触发条件: 自定义监听器实现 实现方式1 实现监听器接口: Order(1) …

[操作系统]进程和线程

目录 1.什么是进程 1.1进程控制块抽象 1.2 CPU 分配 —— 进程调度(Process Scheduling) 1.3内存分配 —— 内存管理(Memory Manage) 1.4进程间通信(Inter Process Communication) 2.线程 2.1概念 2.2为什么要有线程 2.3线…

论文阅读 Forecasting at Scale (二)

最近在看时间序列的文章,回顾下经典 论文地址 项目地址 Forecasting at Scale 3.2、季节性 3.3、假日和活动事件3.4、模型拟合3.5、分析师参与的循环建模4、自动化预测评估4.1、使用基线预测4.2、建模预测准确性4.3、模拟历史预测4.4、识别大的预测误差 5、结论6、致…

【Python】重磅!这本30w人都在看的Python数据分析畅销书更新了!

Python 语言极具吸引力。自从 1991 年诞生以来,Python 如今已经成为最受欢迎的解释型编程语言。 【文末送书】今天推荐一本Python领域优质数据分析书籍,这本30w人都在看的书,值得入手。 目录 作译者简介主要变动导读视频购书链接文末送书 pan…

【计算机方向】通信、算法、自动化、机器人、电子电气、计算机工程、控制工程、计算机视觉~~~~~合集!!!

◆本文为大家梳理了近期可投的EI国际会议,涵盖计算机各个学科方向,均可EI检索 本期EI会议汇总合集涵盖领域:计算机视觉、物联网、算法、通信、智能技术、人工智能、人机交互、机器人、电子电气等众多领域! 本期所推荐的EI会议有…

ros2不同机器通讯时IP设置

看到这就是不同机器的IP地址,为了避免在路由器为不同的机器使用DHCP分配到上面的地址,可以设置DHCP分配的范围:(我的路由器是如下设置的,一般路由器型号都不一样,自己找一下) 防火墙设置-----&…

Leetcode—13.罗马数字转整数【简单】

2023每日刷题(三十七) Leetcode—13.罗马数字转整数 算法思想 当前位置的元素比下个位置的元素小,就减去当前值,否则加上当前值 实现代码 int getValue(char c) {switch(c) {case I:return 1;case V:return 5;case X:return 1…

wpf使用CefSharp.OffScreen模拟网页登录,并获取身份cookie

目录 框架信息&#xff1a;MainWindow.xamlMainWindow.xaml.cs爬取逻辑模拟登录拦截请求Cookie获取 CookieVisitorHandle 框架信息&#xff1a; CefSharp.OffScreen.NETCore 119.1.20 MainWindow.xaml <Window x:Class"Wpf_CHZC_Img_Identy_ApiDataGet.MainWindow&qu…

22LLMSecEval数据集及其在评估大模型代码安全中的应用:GPT3和Codex根据LLMSecEval的提示生成代码和代码补全,CodeQL进行安全评估

LLMSecEval: A Dataset of Natural Language Prompts for Security Evaluations 写在最前面主要工作 课堂讨论大模型和密码方向&#xff08;没做&#xff0c;只是一个idea&#xff09; 相关研究提示集目标NL提示的建立NL提示的建立流程 数据集数据集分析 存在的问题 写在最前面…

使用Python画一棵树

&#x1f38a;专栏【不单调的代码】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f339;Turtle模块&#x1f384;效果&#x1f33a;代码&#x1f6f8;代码…

【tomcat】java.lang.Exception: Socket bind failed: [730048

项目中一些旧工程运行情况处理 问题 1、启动端口占用 2、打印编码乱码 ʮһ&#xfffd;&#xfffd; 13, 2023 9:33:26 &#xfffd;&#xfffd;&#xfffd;&#xfffd; org.apache.coyote.AbstractProtocol init &#xfffd;&#xfffd;&#xfffd;&#xfffd;: Fa…

oracle面试相关的,Oracle基本操作的SQL命令

文章目录 数据库-Oracle〇、Oracle用户管理一、Oracle数据库操作二、Oracle表操作1、创建表2、删除表3、重命名表4、增加字段5、修改字段6、重名字段7、删除字段8、添加主键9、删除主键10、创建索引11、删除索引12、创建视图13、删除视图 三、Oracle操作数据1、数据查询2、插入…