【MySQL基础教程】事务详细介绍

news2024/11/14 19:40:47

前言

在这里插入图片描述

本文为 【MySQL基础教程】事务 相关知识,下边将对事务简介事务操作(包括:未控制事务控制事务),事务四大特性并发事务问题事务隔离级别等进行详尽介绍~

📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)


目录

文章标题

  • 前言
  • 目录
  • 一、事务简介
  • 二、事务操作
    • 1️⃣未控制事务
    • 2️⃣控制事务一
    • 3️⃣控制事务二
  • 三、事务四大特性
  • 四、并发事务问题
  • 五、事务隔离级别
  • 后记

在这里插入图片描述

一、事务简介

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000。 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。

在这里插入图片描述
在这里插入图片描述

正常情况: 转账这个操作, 需要分为以下这么三步来完成 , 三步完成之后, 张三减少1000, 而李四增加1000, 转账成功 :

在这里插入图片描述

异常情况: 转账这个操作, 也是分为以下这么三步来完成 , 在执行第三步是报错了, 这样就导致张三减少1000块钱, 而李四的金额没变, 这样就造成了数据的不一致, 就出现问题了。

在这里插入图片描述

为了解决上述的问题,就需要通过数据的事务来完成,我们只需要在业务逻辑执行之前开启事务,执行完毕后提交事务。如果执行过程中报错,则回滚事务,把数据恢复到事务开始之前的状态。

在这里插入图片描述

注意: 默认MySQL的事务是自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐
式的提交事务。

二、事务操作

数据准备:

drop table if exists account;

create table account(
  id int primary key AUTO_INCREMENT comment 'ID',
  name varchar(10) comment '姓名',
  money double(10,2) comment '余额'
) comment '账户表';

insert into account(name, money) VALUES ('张三',2000), ('李四',2000);

1️⃣未控制事务

🍀(1)测试正常情况

-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';

测试完毕之后检查数据的状态, 可以看到数据操作前后是一致的。

在这里插入图片描述

🍀(2)测试异常情况

-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
出错了....
-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';

我们把数据都恢复到2000, 然后再次一次性执行上述的SQL语句(出错了… 这句话不符合SQL语
法,执行就会报错),检查最终的数据情况, 发现数据在操作前后不一致了。

在这里插入图片描述

2️⃣控制事务一

🍀(1)查看/设置事务提交方式

SELECT @@autocommit ;
SET @@autocommit = 0 ;

🍀(2)提交事务

COMMIT;

🍀(3)回滚事务

ROLLBACK;

注意: 上述的这种方式,我们是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提
交, 此时我们执行的DML语句都不会提交, 需要手动的执行commit进行提交。

3️⃣控制事务二

🍀(1)开启事务

START TRANSACTIONBEGIN ;

🍀(2)提交事务

COMMIT;

🍀(3)回滚事务

ROLLBACK;

转账案例:

-- 开启事务
start transaction
-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';
-- 如果正常执行完毕, 则提交事务
commit;
-- 如果执行过程中报错, 则回滚事务
-- rollback;

三、事务四大特性

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

上述就是事务的四大特性,简称ACID

在这里插入图片描述

四、并发事务问题

🍀(1)赃读:一个事务读到另外一个事务还没有提交的数据。

在这里插入图片描述

比如B读取到了A未提交的数据。

🍀(2)不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

在这里插入图片描述

事务A两次读取同一条记录,但是读取到的数据却是不一样的。

🍀(3)幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 “幻影”。

在这里插入图片描述

五、事务隔离级别

为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:

隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read(默认)××
Serializable×××

🍀(1)查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

🍀(2)设置事务隔离级别

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

注意: 事务隔离级别越高,数据越安全,但是性能越低。


后记

在这里插入图片描述

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~

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

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

相关文章

Linux安装mongodb社区版

1、下载资源 Download MongoDB Community Server | MongoDB 2、将下载的安装包上传到服务器上,并解压缩 #解压 tar -zxvf mongodb-linux-x86_64-rhel70-6.0.3.tgz #移动路径重命名mv mongodb-linux-x86_64-rhel70-6.0.3 /usr/local/mongodb 3、进入 /usr/local/…

适合中学生看的英文电影

怎样利用好丰富的资源来学习英语口语呢?其实其实看什么样的剧、如何看剧都是很讲究的。一起来解锁吧。 一、选剧要学会拆解自己学习目标,选定合适的类型,各取所需。 并不是所有类型的国外影视剧都适合作为学习的素材,主要依据自身…

Python Pyecharts柱状横向动态图-全球GDP比较

程序示例精选 Python Pyecharts柱状横向动态图 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<Python Pyecharts柱状横向动态图>>编写代码&#xff0c;主要功能包括了数据导入&am…

新年新气象----2022年度总结

年度总计——2.0 今年的时间很快飞一般的速度&#xff0c;回顾自己这一年中的日子&#xff0c;不知不觉就结束了&#xff0c;今年确确实实有太多的遗憾&#xff0c;太多的失落和不如意。也让我明白要是这样&#xff0c;就不会那样的道理。 回顾自己去年所定的目标&#xff0c;不…

Spring学习笔记

没有Spring的时候我们如何进行开发的&#xff1f; 没有Spring为我们服务的&#xff0c;写代码一定是这样的 调用层&#xff1a; public static void main(String[] args) {//创建视图层对象TestController testController new TestController();//调用视图层方法testControl…

一篇深入理解MySQL索引底层数据结构与算法

索引的定义 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构有&#xff1a;二叉树&#xff0c;红黑树&#xff0c;Hash表&#xff0c;B-Tree&#xff0c;BTree 对于数据库表的InndB索引来说&#xff0c;底层即是BTree数据结构 B-Tree (1) 叶子节点具有相同的深…

生物化学 实验记录或传闻 简述(暂记)

今天是2023年的1月1日&#xff0c;2022年是疫情肆虐的一年&#xff0c;由于疫情的叨扰&#xff0c;我在22年的最后一个月博客更新停滞了许久&#xff0c;这同时引发了我对一些医学方面的问题的观察&#xff0c;所以我准备在“力学地球物理科学化学”专栏的生物化学部分新增一个…

opencv--颜色识别

目录 一、主要函数介绍 二、颜色识别 三、其他相关函数介绍 1. cv2.resize 2. np.array(x,dtype) 3. cv2.inRange() 4. cv2.imshow() 5.cv2. waitKey() 四、掩膜 一、主要函数介绍 通常&#xff0c;相机在RGB颜色模式下工作&#xff0c;但这种模式受到光线的影响较大&am…

2022年终总结-知识沉淀、疫情、展望未来

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

GIS算法

目录 简介 GIS标准简介 空间数据模型 3.1 WKT与GeoJSON 3.2 WKB格式 GIS算法三方包 简介 地理信息系统(简称GIS),以数字化的形式反映人类社会赖以生存的地球空间的现势和变迁的各种空间数据以及描述这些空间数据特征的属性,支持空间数据及其属性数据的输入/输出,存储,显…

postgresql数据库主备安装,备份还原

一.postgresql数据库安装 1.下载软件包 地址&#xff1a;PostgreSQL: File Browser 2.解压安装 [rootpostgresql u01]# tar -zxf postgresql-14.2.tar.gz安装环境 yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel op…

小说阅读 (支持txt文本文件浏览)

小说阅读2022 - 界面 2023年1月2日 更新 1、修复BUG。。。 2、优化运行。。。 3、添加了 【[阅读笔记] - 可以在章节处填写阅读笔记保存&#xff0c;程序会自动记录位置坐标&#xff0c;每次在读到本章节保存位置坐标时右上角会自动跳出提示图标&#xff0c;点击提示图标即可…

SAP FICO付款及清账

付款及清账 在SAP中&#xff0c;处理付款要达到两个效果&#xff1a; 实现会计凭证的处理&#xff1b; 实现清账&#xff08;将付款与应付账款对应核销&#xff09;&#xff1b; 可以边付边清&#xff0c;也可以先付后清。 一、付款并清账 企业的付款一般有现金付款、银行存款…

Gem5模拟器,全流程运行Chiplet-Gem5-SharedMemory-main(十)

小白入门&#xff0c;跑着个代码头都给我跑秃了&#xff0c;文档说不详细吧似乎啥都和你说了&#xff0c;说它详细吧&#xff0c;看了几遍也跑不出来。记录一下我遇到的问题&#xff1a; 目录 一、确定待执行的程序 &#xff08;1&#xff09;那些年的undefined reference &…

(3分钟速通)Visual Odometry的特征点法和直接法

光流法&#xff1a;(https://zhuanlan.zhihu.com/p/537113460) ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; ​ 编辑切换为居中 添加图…

【免费开放源码】审批类小程序项目实战(预约历史页面)

第一节&#xff1a;什么构成了微信小程序、创建一个自己的小程序 第二节&#xff1a;微信开发者工具使用教程 第三节&#xff1a;深入了解并掌握小程序核心组件 第四节&#xff1a;初始化云函数和数据库 第五节&#xff1a;云数据库的增删改查 第六节&#xff1a;项目大纲以及制…

Vue与React分别实现登录拦截【详细例子+讲解】

文章标题一、Vue实现登录拦截1-1、 效果展示1-2 代码展示1-2-1 router.js1-2-2 store文件夹下1-2-2-1 state.js1-2-2-2 index.js1-2-2-3 mutation.js1-2-3 main.js【实现登录拦截的关键---全局路由守卫】1-2-4 pages下的login.vue1-3 总结二、 Vue项目功能简介2-1 功能2-2 查看…

基于RBAC模型的权限控制的一整套基础开发平台,前后端分离,后端django,前端 vue+ElementUI

Django-Vue-Admin 完整代码下载地址&#xff1a;基于RBAC模型的权限控制的一整套基础开发平台 &#x1f4a1; 「关于」 我们是一群热爱代码的青年&#xff0c;在这个炙热的时代下&#xff0c;我们希望静下心来通过Code带来一点我们的色彩和颜色。 因为热爱&#xff0c;所以…

TensorFlow之过拟合与欠拟合-1

1 基本概念 过度拟合&#xff08;overfit&#xff09; 创建的模型与用于该模型的训练数据之间发生过于密切的关系&#xff0c;从而引起该模型无法对新数据进行准确的预测。正则化&#xff08;Regularization&#xff09;策略可以减少过度拟合&#xff0c;或者使用大数据量、多…

考研数学660刷题记录

&#x1f422;&#x1f422; 基本概念-基本理论-基本方法 &#x1f422;&#x1f422; 660刷题记录 二轮复刷标志 ⭐&#xff1a;掌握不熟练 ⭐⭐&#xff1a;是基本方法的组合&#xff0c;但没解出来 ⭐⭐⭐&#xff1a;很难想到这种破局的手段 序号①、②&#xff1a;表示多…