MySQL ---- 事务

news2024/11/15 11:13:21

事务

1、事务简介

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

在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异常,这条 SQL 就可能执行失败。

事务执行是一个整体,所有的 SQL 语句都必须执行成功。如果其中有 1 条 SQL 语句出现异常,则所有的 SQL 语句都要回滚,整个业务执行失败。

转账事务

默认MysQL的事务是自动提交的,也就是说,当执行一条DML语句,MYSQL会立即隐式的提交事务。

2、事务操作

准备及模拟

  • 数据的准备
-- 创建账户表account
create table account(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    money int comment '余额'
)comment '账户表';
-- 插入数据
insert into account (id, name, money ) values (null,'张三',2000),(null,'李四',2000);
-- 回复数据
update account set money = 2000 where name = '张三' or name = '李四';
  • 模拟转账
模拟转账

对于 mysql 而言,每一条 sql 语句就是一个事务,sql 执行完后,mysql 默认隐式提交事务,sql 的操作就会同步到数据库,所以在异常的转账操作中,1 和 2 的 sql 执行成功了并都隐式提交了事务,张三的 money 就减少了 1000,第3条 sql 利用语法错误制造了一个异常,该 sql 不会执行成功,李四的 money 就没改变。

通过设置事务提交方式的形式

  • 查看和设置事务提交方式
-- 查看当前事务的提交方式
select @@autocommit;
-- 将事务提交方式设置为手动提交(1 自动提交;0 手动提交)
set @@autocommit = 0;
事务提交方式
  • 提交事务
-- 当要执行的操作成功执行后需手动提交事务后操作的更改才会同步到数据库
commit;
  • 回滚事务
-- 当要执行的操作没有完全成功执行,则需手动回滚事务撤销部分执行成功对数据的更改
rollback;

通过手动开启事务的形式

  • 开启事务
start transaction;
-- 或者
begin;
  • 提交事务
commit;
  • 回滚事务
rollback;
  • 示例(开启事务后需要手动提交或回滚)
事务开启、提交、回滚

3、事务四大特性(ACID

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

4、并发事务问题

并发事务问题
并发事务问题

5、事务隔离级别

事务的隔离级别就是解决上述并发事务问题的。

事务隔离级别

事务的隔离级别 Serializable > Repeatable Read > Read committed > Read uncommitted ,隔离级别越高,数据安全性越高,性能越低。选择隔离级别需同时考虑数据安全性和性能问题。

-- 查看事务隔离级别
select @@transaction_isolation;
-- 设置事务隔离级别
set [session|global] transaction isolation level {read uncommitted | read committed | repeatable read | serializable};

session:针对当前客户端设置事务隔离级别

global:针对全局所有客户端设置事务隔离级别

  • Read uncommitted 演示脏读
脏读演示
  • Read committed 隔离级别解决脏读问题存在不可重复读问题
解决脏读演示
  • repeatable read 解决了脏读、不可重复读,存在幻读
repeatable read
repeatable read
  • serializable:串行化,在进行并发事务时,只允许一次一个事务操作。
serializable

6、事务总结

事务总结

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

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

相关文章

如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)

如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows) 如何制作 ESXi USB 启动盘 请访问原文链接:https://sysin.org/blog/create-bootable-esxi-usb-installer/,查看最新版。原创作品,转载请保留出处。 作者主页:sysi…

第四十六章 Unity 布局(上)

学习了UI元素的使用,并不能构建出一个完整的UI界面,我们需要使用一些方法将这些UI元素按照“设计稿”的效果,将其摆放到对应的位置上。如何摆放这些UI元素,就是我们需要讲的“布局”,当然这需要借助一些布局组件来完成…

SpringBootFoundation

SpringBootFoundation 一. 项目创建1.1 创建项目1.2 并调整pom.xml1.3 创建子项目1.4 配置子项目pom1.4.1 使用`csmall-server`作为父项目 并且 添加依赖项1.5 关于聚合项目二. YAML语法的配置2.1 关于YAML语法一. 项目创建 1.1 创建项目 本项目是一个聚合项目的结构,首先,创…

clickhouse集群部署指南

一、前言: 上篇文章介绍了clickhouse单机部署指南,本章重点介绍下集群部署指南,文章重在实战,相关知识请自行学习。 二、环境准备: CentOS7 4核16G 3台(172.25.16.82、172.25.16.83、172.25.16.84) 三、安装包准备…

第三方ipad笔哪个牌子好用?ipad触控笔推荐平价

至于选择苹果原装的电容笔,还是平替的电容笔,要看个人的需求而定,比如画图用的,可以用Apple Pencil;比如学习记笔记用的,可以用平替电容笔,目前的平替电容笔无论是品质还是性能,都非…

【Linux】Linux环境下安装Jenkins(图文解说详细版)

文章目录 前言1、在根目录下创建文件夹2、下载linux jenkins3、 进入jenkins目录解压,解压命令:4、启动5、访问一下,浏览器访问:http://服务器IP:8080/ 前言 首先安装Jenkins之前,linux中必须安装好了JDK和Maven,如果…

MVI架构理解

回顾MVC MVP MVVM MVC MVC架构主要分为以下几部分: View层: 对应于xm布局文件和java代码动态view部分。 Controller层: 主要负责业务逻辑,在android中由Activity承担,但xml视图能力太弱,所以Activity既要负责视图的显示又要加入…

Node框架 【Koa】之 【静态资源管理、模板引擎、连接数据库】

文章目录 🌟前言🌟静态资源托管🌟安装🌟使用 🌟Koa视图🌟EJS模板引擎使用🌟安装🌟配置🌟使用🌟模板渲染方法🌟使用案例 🌟数据库&…

OBS直播时编码器、码率控制器、分辨率帧率是什么以及如何向第三方推流

内容摘要:OBS直播时编码器、码率控制器、分辨率、帧率到底是什么,以及OBS向第三方直播平推流时,要注意什么。 图:OBS直播时输出界面参数设定 OBS编码器 1. 软编:x264 使用CPU进行编码,占用CPU资源多&…

m3u8文件

#EXTM3U:m3u文件头,必须放在第一行,起标示作用; #EXT-X-VERSION:播放列表文件的兼容版本。若不存在此标记,则默认为协议的第一个版本; #EXT-X-MEDIA-SEQUENCE: 播放列表中的每个媒…

第1章计算机系统漫游之 “操作系统管理硬件“

7、操作系统管理硬件 回到 hello 程序的例子。当 shell 加载和运行 hello 程序时,当 hello 程序输出自己的消息时,程序没有直接访问键盘、显示器、磁盘或主存储器。取而代之的是,它们依靠操作系统提供的服务。 可以把操作系统看成是应用程序…

王琤:当数据治理遇上ChatGPT

以ChatGPT为代表的人工智能等技术正在“狂飙”,为全球带来一场翻天覆地的变革。4月27日在2023数据治理新实践峰会上,Datablau数语科技创始人&CEO王琤先生以《数据治理新实践与人工智能》为主题进行了分享,与参会同仁共同探索当数据治理遇…

APP开发的上线流程

APP的使用已经非常普及,对于企业来说通过APP可以加强和客户的沟通,展现最新的产品和服务。随着APP应用商店对用户隐私的重视,APP的上线规则比以前更加复杂,甚至出现APP需要反复修改数十次才能上架的问题,今天和大家分享…

移远通信参加2023中国移动5G发展大会 ,共探5G创新未来

5月6日,以“聚力5G创新,共铸百业绽放”为主题的中国移动5G发展大会在郑州国际会展中心召开。作为5G赋能千行百业的重要贡献者,移远通信应邀参加大会,并深度参与了大会的多个环节。 会上,中国移动系列创新成果发布&…

【Linux】Linux安装tomcat(图文解说详细版)

文章目录 1、安装前置条件2、下载所需压缩包,上传到服务器3、对资源进行解压4、给防火墙添加访问端口(默认8080,在它的/conf/server.xml文件里面查看)5、然后切换到bin目录下,启动(成功效果如图&#xff09…

批量任务导致页面卡死解决方案

需求背景 需要基于高德地图展示海量点位(大概几万个),点位样式要自定义(创建DOM),虽然使用了聚合点,但初始化时仍需要将几万个点位的DOM结构都创建出来。 这里补充一句,高德地图在2.…

为什么剑桥出身的“AI教父”辛顿会担心?

剑桥很有意思!在那儿呆过的人常常有这样一种感觉:剑,很锋利!桥,很温柔!剑桥的科技自不必说,牛顿、达尔文、麦克斯韦、爱丁顿......,剑桥的人文却也不让科技,拜伦、培根、…

使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端&…

【软考备战·希赛网每日一练】2023年5月9日

文章目录 一、今日成绩二、错题总结第一题三、知识查缺 题目及解析来源:2023年05月09日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 有损、无损连接判断: (A1,A2)∩(A1,A3)A1 (A1,A2)-(A1,A3)A2 (A1,A3)-(A1,A2)A3 所以A1-&…

车载5G放量增长,哪些厂商抢跑

前装标配19.88万辆,同比上年同期增长724.89%,这是一季度中国市场乘用车5G搭载上车交付的成绩。高工智能汽车研究院监测数据显示,2022年全年5G交付搭载41.74万辆(不含选装),前装搭载率为2.09%。 这意味着&a…