MySQL数据库的事务

目录

1、事务的概念

2、事务的ACID特点 

2.1 原子性

2.2 一致性 

 2.3 隔离性

2.3.1MySQL事务隔离级别

2.3.2事务隔离级别的作用范围

2.3.3 查询事务的隔离级别 

2.3.4 设置事务的隔离级别 

​编辑 2.4 持久性

3、事务控制语句 

3.1测试begin和commit(开始事务和提交事务) 

3.2测试事务未提交的回滚 

3.3测试创建回滚点并进行回滚 

​编辑

 4、使用 set 设置控制事务


1、事务的概念

  • 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个 整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
  • 事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
  • 事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。
  • 事务通过事务的整体性以保证数据的一致性。
  • 事务能够提高在向表中更新和插入信息期间的可靠性。

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

2、事务的ACID特点 

ACID,是指在可靠数据库管理系统(DBMS) 中,事务(transaction)应该具有的四个特性:原子性(Atomicity) 、一致性(Consistency )、隔离性(Isolation) 、持久性(Durability) 。这是可靠数据库所应具备的几个特性。

2.1 原子性

指在事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。

  • 事务是一个完整的操作,事务的各元素是不可分的。
  • 事务中的所有元素必须作为一个整体提交或回滚。
  • 如果事务中的任何元素失败,则整个事务将失败

2.2 一致性 

指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

  • 当事务完成时,数据必须处于一致状态 。
  • 在事务开始前,数据库中存储的数据处于一致状态。
  • 在正在进行的事务中,数据可能处于不一致的状态。
  • 当事务成功完成时,数据必须再次回到E知的一致状态。

 2.3 隔离性

指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

  • 对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
  • 修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。
  • 也就是说并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。

当多个客户端并发地访问同一个表时,可能出现下而的一致性问题

脏读:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即不能读到相同的数据内容)

幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有没有修改的数据行,就好象发生了幻觉一样。

丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

2.3.1MySQL事务隔离级别

事务的隔离级别决定了事务之间可见的级别。

MySQL事务支持如下四种隔离,用以控制事务所做的修改,并将修改通告至其它并发的事务:

(1)未提交读(Read Uncommitted(RU)):

允许脏读,即允许一个事务可以看到其他事务未提交的修改。

(2)提交读(Read Committed (RC)):

允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的。防止脏读。

(3)可重复读(Repeatable Read(RR)):——mysql默认的隔离级别

确保如果在一个事务中执行两次相同的SELECT语句,都能得到相同的结果,不管其他事务是否提交这些修改。可以防止脏读和不可重复读。

(4)串行读(serializable):——相当于锁表

完全串行化的读,将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁,读写相互都会阻塞。可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的执行效率。

隔离级别脏读不可重复读幻读第一类丢失更新第二类丢失更新
未提交读允许允许允许禁止允许
已提交读禁止允许允许禁止允许
可重复读禁止禁止对 InnoDB 禁止禁止禁止
串行读禁止禁止禁止禁止禁止

 mysql默认的事务处理级别是repeatable read,而Oracle和SQL Server是read committed 。

2.3.2事务隔离级别的作用范围

事务隔离级别的作用范围分为两种:

  • 全局级:对所有的会话有效
  • 会话级:只对当前的会话有效(退出连接后即失效)

2.3.3 查询事务的隔离级别 

查询全局事务隔离级别

variables 指变量, global variables 指全局变量。

show global variables like '%isolation%';   #like 模糊查询
或 ​
select @@global.tx_isolation;               

查询会话事务隔离级别

show session variables like '%isolation%';  
或  
select @@session.tx_isolation;                
或 ​
select @@tx_isolation;         

2.3.4 设置事务的隔离级别 

设置全局事务隔离级别:

 set global transaction isolation level 隔离级别; 

设置会话事务隔离级别: 

会话事务隔离级别只对当前连接有效,退出连接后失效。在其他终端连接无效。再次连接后会恢复为全局事务的隔离级别。

set session transaction isolation level 隔离级别;

 

 2.4 持久性

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚

  • 指不管系统是否发生故障,事务处理的结果都是永久的。
  • 一旦事务被提交,事务的效果会被永久地保留在数据库中。

总结:在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果。

3、事务控制语句 

  • BEGIN 或 START TRANSACTION: 显式地开启一个事务。
  • COMMIT 或 COMMITWORK: 提交事务,并使已对数据库进行的所有修改变为永久性的。
  • ROLLBACK 或 ROLLBACK WORK: 回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
  • SAVEPOINT S1: 使用SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个SAVEPOINT;“S1”代表回滚点名称。
  • ROLLBACK TO [SAVEPOINT] S1: 把事务回滚到标记点。

3.1测试begin和commit(开始事务和提交事务) 

mysql> use my
mysql> create table account (id int,name char(10),money double);
mysql> insert into account values(1, 'my', 1000);  
mysql> insert into account values(2, 'qyd', 2000);
mysql> select * from account;

 

 

 

3.2测试事务未提交的回滚 

3.3测试创建回滚点并进行回滚 

 4、使用 set 设置控制事务

在mysql中执行单独的命令会立即生效,是因为Mysql默认开启自动提交

使用 set 设置控制事务:

set AUTOCOMMIT=0;       #禁止自动提交(仅针对当前会话)
set AUTOCOMMIT=1;       #开启自动提交(仅针对当前会话),Mysql默认为1
show variables like 'AUTOCOMMIT';   #查看当前会话的AUTOCOMMIT值
  • 如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入roollback或者commi当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。
  • 如果开起了自动提交,mysql 会把每个sql 语句当成一个事务,然后自动的commit。
  • 当然无论开启与否begin,commit,rollback都是独立的事务。

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

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

相关文章

SOC子模块---RTC and watchdog

RTC RTC大致执行过程: 对SOC 中的锁相环或者外部晶振的时钟进行计数;产生时,分,秒的中断;送给中断控制器;中断控制器进行优先权选择后送给cpu;Cpu执行中断服务程序;在中断服务程序…

python程序打包

目录 1. 命令2. 安装2.1 PyInstaller2.2 cx_Freeze(笔者未用过) 3. 打包示例3.1 在 pycharm 中执行3.2 若使用打包命令时报错3.3 路径问题 python打包成可执行文件,用于在没有Python环境的地方运行该程序,与qt打包类似。(笔者写的qt打包地址&…

鸿蒙实战开发:【7日天气预报】

先来看一下效果 本项目界面搭建基于ArkUI中TS扩展的声明式开发范式, 数据接口是[和风(天气预报)], 使用ArkUI自带的网络请求调用接口。 我想要实现的一个功能是,查询当前城市的实时天气, 目前已实现的功…

聚类算法之高斯混合模型聚类 (Gaussian Mixture Model, GMM)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 高斯混合模型(GMM)是统计模型中的一颗璀璨之星,它为数据提供了一种复杂而又强大的表示方法。在机器学习的许多…

并查集|1971. 寻找图中是否存在路径、684.冗余连接、685.冗余连接II

目录 并查集基础 1971. 寻找图中是否存在路径 684.冗余连接 685.冗余连接II 并查集基础 并查集主要有三个功能。 寻找根节点,函数:find(int u),也就是判断这个节点的祖先节点是哪个将两个节点接入到同一个集合,函数&#xf…

【深度学习】一文搞懂 如何计算图像数据集的RGB均值和方差(超详细的哦~)

计算图像数据集的RGB均值和方差 1、引言2、RGB均值和方差2.1 计算RGB均值和方差原因2.2 计算RGB均值和方差步骤2.3 代码实现2.3.1 TensorFlow计算RGB均值和方差2.3.2 PyTorch计算RGB均值和方差 3、总结 1、引言 小屌丝:鱼哥,帮个忙呀 小鱼:在…

了解Spring:Java开发的利器

Spring是一款开源的轻量级Java开发框架,旨在提高开发人员的效率和系统的可维护性。本文将介绍Spring的基本概念、使用优势、设计模式以及与Spring MVC和Spring Boot的关联。 什么是Spring? Spring是一款开源的轻量级Java开发框架,它由多个模…

STM32之HAL开发——HAL库框架介绍

HAL库外设设计思想 HAL库借鉴面向对象的设计思想,将外设驱动封装为对象。 HAL库使用主线 HAL使用的主要用在俩个地方,无外乎外设初始化以及外设的使用。想用好这两个功能,我们首先得对外设的封装有一定的了解。 句柄结构体 xx_HandleTypeDef…

【吾爱破解】Android初级题(二)的解题思路 _

拿到apk,我们模拟器打开看一下 好好,抽卡模拟器是吧😀 jadx反编译看一下源码 找到生成flag的地方,大概逻辑就是 java signatureArr getPackageManager().getPackageInfo(getPackageName(), 64).signaturesfor (int i 0; i &l…

批量高效剪辑视频,轻松调整视频时长,轻松打造完美节奏

在数字化时代,视频内容已成为我们生活中不可或缺的一部分。无论是社交媒体上的短视频,还是专业影视制作中的长片,视频剪辑都扮演着至关重要的角色。然而,面对大量视频素材,如何高效地进行剪辑调整,让每一帧…

Express:快速搭建Node.js应用的基石

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

华为OD机试 - 打印任务排序 - 队列(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…

0基础 三个月掌握C语言(14)-上

自定义类型 其实C语言有内置类型 也有自定义的类型 内置类型(C语言本身支持的现成的类型) 如:char short int long float double.... 但仅仅有这些类型是不够的 比如说 我们想表示一个人(复杂对象) 对于人的描述那…

我们是如何测试人工智能的(八)包含大模型的企业级智能客服系统拆解与测试方法 -- 大模型 RAG

大模型的缺陷 -- 幻觉 接触过 GPT 这样的大模型产品的同学应该都知道大模型的强大之处, 很多人都应该调戏过 GPT,跟 GPT 聊很多的天。 作为一个面向大众的对话机器人,GPT 明显是鹤立鸡群,在世界范围内还没有看到有能跟 GPT 扳手腕…

开启Safari手势支持

在使用Safari 的时候,大家有没有觉得不支持手势使用起来不是很方便, 触摸板只支持少量简单的手势,如缩放,滚动等。如果使用鼠标的用户,则完全无法使用手势。经过折腾研究,使用CirMenu应用可以完美解决这个要…

C++第十一弹---类与对象(八)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、友元 1.1、友元函数 1.2、友元类 2、内部类 3、匿名对象 4、拷贝对象时的一些编译器优化 总结 1、友元 友元提供了一种突破封装的方式&a…

深度解析:Elasticsearch写入请求处理流程

版本 Elasticsearch 8.x 原文链接:https://mp.weixin.qq.com/s/hZ_ZOLFUoRuWyqp47hqCgQ 今天来看下 Elasticsearch 中的写入流程。 不想看过程可以直接跳转文章末尾查看总结部分。最后附上个人理解的一个图。 从我们发出写入请求,到 Elasticsearch 接收请…

单目深度估计基础理论和论文学习总结

单目深度估计基础理论和论文学习总结 一、背景知识: 三维刚体运动的数学表示:旋转平移矩阵、旋转向量、欧拉角、四元数、轴角模型、齐次坐标、各种变换等 照相机模型:单目/双目模型,单目中的世界坐标系/相机坐标系/图像坐标系的…

从零开始的 dbt 入门教程 (dbt cloud 自动化篇)

一、引 在前面的几篇文章中,我们从 dbt core 聊到了 dbt 项目工程化,我相信前几篇文章足够各位数据开发师从零快速入门 dbt 开发,那么到现在我们更迫切需要解决的是如何让数据更新做到定时化,毕竟作为开发我们肯定没有经历每天定…

【项目管理后台】Vue3+Ts+Sass实战框架搭建二

Vue3TsSass搭建 git cz的配置mock 数据配置viteMockServe 建立mock/user.ts文件夹测试一下mock是否配置成功 axios二次封装解决env报错问题,ImportMeta”上不存在属性“env” 统一管理相关接口新建api/index.js 路由的配置建立router/index.ts将路由进行集中封装&am…