MySQL基础-事务

目录

1.事务简介

2.事务的操作

2.1 实验需要用到的数据

2.2 完成转账操作

修改事务执行方式

手动开启事务的方式

 3.事务的四大特性

4.并发事务问题

5.事务隔离级别

5.1 事务隔离级别分类

5.2 查看事务隔离级别

5.3 设置事务隔离级别


1.事务简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求,即这些操作要么同时成功,要么同时失败。其主要作用就是为了保证数据的统一性和完整性。

最典型的案例:当处理银行账户的转账操作时,可以使用事务来确保数据的一致性和完整性。假设有两个账户,账户A和账户B,我们想要从账户A向账户B转移一定金额。这时候的增加B账户的金额和减少A账户的金额就必须要同时成功,否则就会出现意外情况。

总结:当我们需要同时执行好几个sql语句,并且必须要确保所有的sql语句都运行成功,这时候才会修改数据库中的数据,否则当初临时修改的数据会执行回滚操作将修改的数据恢复回原来的数据。

2.事务的操作

2.1 实验需要用到的数据

创建一个账户表并且插入需要用到的数据

create table account(id int auto_increment primary key ,name varchar(10),money int
) comment '账户表';insert into account (id, name, money) values (null,'zs',2000),(null,'ls',2000);

2.2 完成转账操作

转账执行流程

查询被转账的账户余额----->被转账用户余额减少------>收入用户余额增加

没有采用事务时的执行基本执行流程

# 查询用户余额
select * from account where name = 'zs';
# 将 zs 的余额减少1000
update account set money = money - 1000 where name = 'zs';
# 将 ls 的余额增加1000
update account set money = money + 1000 where name= 'ls';

执行结果

现在这个执行结果是正确的

现在假设出现了异常情况

# 查询用户余额
select * from account where name = 'zs';
# 将 zs 的余额减少1000
update account set money = money - 1000 where name = 'zs';
出现错误 #语法错误
# 将 ls 的余额增加1000
update account set money = money + 1000 where name= 'ls';

这三句sql出现了明显的语法错误,第三句sql是无法执行的,因为前面已经出现了报错

这时候执行结果就会出现钱不见的问题,此时就需要结合事务来完成这个转账功能。

修改事务执行方式

mysql语句中每一句sql语句都是一个独立的事务,且它们都是自动执行的

此时我们可以手动的关闭事务自动提交,改为手动提交

select @@autocommit; # 查询提交方式,0为手动,1为自动
set @@autocommit = 0; # 修改提交方式为手动

这时候修改了事务提交的方式,此时在执行对应的sql语句就需要手动提交才可以修改数据

可以看到在我们执行完上面的三句sql后数据并没有修改

手动提交事务

commit;

执行完这条手动提交之后,数据库的数据就发生了变化

假如事务出现了异常,就再手动回滚数据

rollback;

手动开启事务的方式

# 开启事务
start transaction ;

其实现方式和修改事务的执行方式是一致的

执行完sql后数据不会发生改变,需要手动的提交事务,或者出现异常回滚事务

执行语句也是一样

commit; # 提交事务rollback; # 回滚事务

注意这里的提交以及回滚在开启的一个事务中只有一个能执行,假如已经提交了事务,代表此事务已经结束了,就不能在执行回滚事务了,但上面的修改事务的执行方式是可以多次执行的。

 3.事务的四大特性

  1. 原子性(Atomicity):事务是原子的,意味着它要么完全执行,要么完全回滚。如果事务中的任何一部分操作失败,整个事务都将被回滚,不会留下部分更改。

  2. 一致性(Consistency):事务开始前数据库必须处于一致状态,事务结束后,数据库也必须保持一致状态。这意味着事务应该满足预定义的约束,如唯一性约束、外键关系等。

  3. 隔离性(Isolation):多个事务可以同时执行,但它们应该被隔离,以防止互相干扰。数据库系统通常提供了不同的隔离级别,例如读未提交、读已提交、可重复读和串行化,以控制事务之间的可见性和互动。

  4. 持久性(Durability):一旦事务提交,对数据库的更改应该永久保存,即使发生系统崩溃或故障。

4.并发事务问题

脏读:在某些隔离级别下,一个事务可能会读取到另一个事务尚未提交的未确认数据,这被称为脏读。如果读取的数据最终被回滚,读取的数据就会变得无效。

不可重复读:在某些隔离级别下,一个事务可能会在同一个事务中的两次读取之间看到不同的数据,这被称为不可重复读。这可能是由于其他事务的修改导致的。

 

幻读:在某些隔离级别下,一个事务可能会在同一个事务中的两次查询之间看到不同数量的行,这被称为幻读。这是由于其他事务插入或删除行导致的。

 

5.事务隔离级别

5.1 事务隔离级别分类

  1. 读未提交(Read Uncommitted):最低级别,允许一个事务读取其他事务尚未提交的数据。这可能导致脏读、不可重复读和幻读等问题

  2. 读已提交(Read Committed):这是大多数数据库系统的默认隔离级别。在这个级别下,一个事务只能读取已经提交的数据,解决了脏读。但仍然可能发生不可重复读和幻读

  3. 可重复读(Repeatable Read 默认):在这个隔离级别下,一个事务在开始时会创建一个一致性的快照,然后在整个事务期间使用这个快照。这可以防止不可重复读和脏读,但仍然可能发生幻读。MySQL的InnoDB存储引擎默认使用这个隔离级别。

  4. 串行化(Serializable):最高级别,确保了最高程度的数据一致性。在这个级别下,事务之间彻底隔离,不会发生脏读、不可重复读或幻读。但是,它通常会导致性能下降,因为它需要更多的锁定和资源。

5.2 查看事务隔离级别

select @@transaction_isolation;

当前是默认的

5.3 设置事务隔离级别

set session transaction isolation level 隔离级别;

 

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

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

相关文章

实时人脸五观检测:基于libfacedetection(CNN模型)

一、前言 随着人工智能技术的不断发展,人脸检测已成为计算机视觉领域的重要应用之一。人脸检测是一种将输入图像中的人脸位置和轮廓提取出来的技术,广泛应用于人脸识别、智能监控、人机交互等领域。利用libfacedetection开源的人脸检测库,实现人脸检测。 libfacedetection…

第一课数组、链表、栈、队列

第一课数组、链表、栈、队列 acwing136 邻值查找---中等题目描述代码展示 lc20.有效的括号--简单题目描述代码展示 lc25.K 个一组翻转链表--困难题目描述代码展示 lc26.删除有序数组中的重复项--简单题目描述代码展示 lc88.合并两个有序数组--简单题目描述代码展示 lc141.环形链…

mysql-binlog

1. 常用的binlog日志操作命令 1. 查看bin-log是否开启 show variables like log_%;2. 查看所有binlog日志列表 show master logs;3.查看master状态 show master status;4. 重置(清空)所有binlog日志 reset master;2. 查看binlog日志内容 1、使用mysqlb…

目前制造企业生产计划现状是什么?有没有自动化排产系统?

大家都知道,人的指挥中心是大脑,大脑对我们的发出各种各样的指令,告诉我们:“手”做什么事情,“眼睛”看什么地方,“耳朵”听什么声音,然后再将摸到的、看到的、听到的信息传递给大脑&#xff0…

《视觉 SLAM 十四讲》V2 第 4 讲 李群与李代数 【什么样的相机位姿 最符合 当前观测数据】

P71 文章目录 4.1 李群与李代数基础4.1.3 李代数的定义4.1.4 李代数 so(3)4.1.5 李代数 se(3) 4.2 指数与对数映射4.2.1 SO(3)上的指数映射罗德里格斯公式推导 4.2.2 SE(3) 上的指数映射SO(3),SE(3),so(3),se(3)的对应关系 4.3 李代数求导与扰动模型4.3.2 SO(3)上的李代数求导…

Vue中如何进行图像处理与图像滤镜

在Vue中进行图像处理与图像滤镜 图像处理和滤镜效果是现代Web应用程序中常见的功能之一。Vue.js作为一个流行的JavaScript框架,为实现这些功能提供了许多工具和库。本文将介绍如何使用Vue来进行图像处理与图像滤镜,包括使用HTML5 Canvas和CSS滤镜。 准备…

Nacos与Eureka的区别

大家好我是苏麟今天说一说Nacos与Eureka的区别. Nacos Nacos的服务实例分为两种l类型: 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。非临时实例:如果实例宕机,不会从服务列表剔除&…

网络层·IP协议

承接前文TCP协议-CSDN博客 简介 协议头格式 网段划分(重要) 划分方法 IP地址的数量限制(背景介绍) 私有IP地址和公网IP地址(提出解决思路) NAT技术(解决方法) 路由 网络层 在复杂的网络环境中确定一个合适的路径 IP协议 主机: 配有IP地址, 可以认为就是你的电脑; 路由器:…

分享几个优秀开源免费管理后台模版,建议收藏!

大家好,我是 jonssonyan 今天和大家分享一些免费开源的后台管理页面,帮助大家快速搭建前端页面。为什么要用模板?道理很简单,原因是方便我们快速开发。我们不应该花太多的时间在页面调整上,而应该把精力放在核心逻辑和…

【有限域除法】二元多项式除法电路原理及C语言实现

二元多项式除法电路原理 例: g ( x ) = x 4 + x 2 + x + 1 g(x)=x^4 + x^2+x+1

Linux系统编程系列之进程间通信-IPC对象

Linux系统编程系列(16篇管饱,吃货都投降了!) 1、Linux系统编程系列之进程基础 2、Linux系统编程系列之进程间通信(IPC)-信号 3、Linux系统编程系列之进程间通信(IPC)-管道 4、Linux系统编程系列之进程间通信-IPC对象 5、Linux系统…

使用Scipy优化梯度下降问题

目 录 问题重述 附加问题 步骤实施 1.查看Scipy官网SciPy,找到优化有关的模块(Optimize) 2.研究多种优化策略,选择最符合代码的方案进行优化 3.minimize函数参数及其返回值 4.代码展示 5.结果展示 6.进一步优化 6.1对…

【最新】如何在CSDN个人主页左侧栏添加二维码?侧边推广怎么弄?

目录 引言 效果展示 步骤讲解 引言 当你决定在CSDN上展示自己的技术才能和项目时,💡 将你的个人主页变得更炫酷和引人注目是必不可少的!在这篇博客中,我们将向你揭开神秘的面纱,教你如何在CSDN个人主页的左侧栏上添…

搭建Windows上的Qt桌面开发环境

搭建Windows上的Qt桌面开发环境 准备有效邮箱安装VS2019 CommunityMicrosoft个人账号注册地址下载在线安装器安装C工具链 安装QtQt开发者账号注册地址下载在线安装器安装Qt 5.15工具链和Qt Creator 使用Qt Creator编译示例工程配置构建套件(Kit)打开示例…

MySQL进阶-存储引擎

目录 1.MySQL体系结构 体系结构图 各层的作用 2.存储引擎简介 2.1查看当前表的存储引擎 2.2 查询mysql支持的存储引擎 2.3 InnoDB简介 2.4 MyISAM简介 2.5 Memory简介 3.存储引擎的选择 1.MySQL体系结构 mysql体系结构主要有四层结构,从上到下依次是&#…

论文阅读——Pyramid Grafting Network for One-Stage High Resolution Saliency Detection

目录 基本信息标题目前存在的问题改进网络结构CMGM模块解答为什么要用这两个编码器进行编码 另一个写的好的参考 基本信息 期刊CVPR年份2022论文地址https://arxiv.org/pdf/2204.05041.pdf代码地址https://github.com/iCVTEAM/PGNet 标题 金字塔嫁接网络的一级高分辨率显著性…

Vue3 模糊搜索筛选

Vue3 模糊搜索筛选 环境&#xff1a; vue3 tselement plus 目标&#xff1a; 输入框输入内容&#xff0c;对展示的列表进行模糊搜索筛选匹配的内容。 代码如下&#xff1a; <div style"margin-top: 50px"><el-input v-model"valueInput" size&…

纸质书籍OCR方案大揭秘,快来看看有哪些神奇的黑科技

随着数字化时代的来临&#xff0c;纸质书籍逐渐被电子书所替代。在将纸质书籍转换为电子格式的过程中&#xff0c;扫描电子书目录并进行文字识别&#xff08;OCR&#xff0c;Optical Character Recognition&#xff09;成为了一项重要的工作。OCR技术能够将纸质书籍中的文字内容…

【开发篇】十六、SpringBoot整合JavaMail实现发邮件

文章目录 0、相关协议1、SpringBoot整合JavaMail2、发送简单邮件3、发送复杂邮件 0、相关协议 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;&#xff1a;简单邮件传输协议&#xff0c;用于发送电子邮件的传输协议POP3&#xff08;Post Office Protocol - Versi…

基于SpringBoot的学生选课系统

基于SpringBoot的学生选课系统的设计与实现&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 前台主页 登录界面 管理员界面 教师界面 学生界面 摘要 学生选课系统…