【MySQL】事务(上)

文章目录

  • 事务概念
  • 什么是事务?
  • 为什么要有事务?
  • 事务的版本支持
  • 事务的提交方式
  • 事务常见操作方式
  • 基本操作

事务概念

mysql 本身内部采用 多线程的方式,来实现数据存储 相关的工作 就注定对数据 有并发访问的场景
为了解决这类问题,就提供了 事务 的概念


火车票售票系统中 存在一张tickets表,包含 id 、name 和 nums(票数)

mysql是一个网络服务,被一个人访问时,也有可能被其他人访问
当客户端A和客户端B 同时向火车票售票系统 购买票时
假设只有一张票,当客户端A想要买票时,经过if判断时,发现票数为1
但可能由于mysql内部的多线程 被调度了,负责给客户端A买票的线程被挂起了

当客户端B想要买票时,经过if判断,发现票数依旧为1
就会出现 仅有的一张票被卖了两次


增删查改 满足 以下情况,即可解决上述问题

买票的过程需要 是原子的
( 要不就别买票,要买 就将票买完)

买票互相不能影响
( 不能发生 A正在买票,B也过来买票的情况,A和B两者买票不能互相影响)

买完票要永久有效
(不能发生买完票后,不承认该票存在的情况)

买前和买后的状态是确定的
(买前就是没买票,买后就是买了票,不能出现中间状态的情况)


什么是事务?

编写sql语句时,有可能一条sql语句是解决不掉问题的,需要一批sql语句共同组合才能完成
如:从银行卡A中提钱,向银行卡B转账,将银行卡A中的钱减100,再将银行卡B中的钱加100
使用两条sql 语句 才能完成,单独一条语句是完不成操作的

事务 是由 一条或者多条事务 构成的集合体,这个集合体 需要共同完成某种任务
构成这个集合体的语句,要么全部失败,要么全部成功
同样事务规定不同的客户端 看到的数据是不同的


事务主要处理 操作量大、复杂度高的数据
如:你毕业了,学校的教务系统中要删除你的全部数据,除了删除姓名、电话等基本信息,还要删除你的其他有关信息


mysql为了保证事务的正确运行,就需要维护四大属性

原子性: 一个事务的所有操作,要么就全部都完成,要么就全部都不完成,不会出现结束在中间某个环节

隔离性: 数据库允许多个并发事务 同时对其数据进行 读写和修改的能力
隔离性可以防止多个事务 并发执行时由于交叉执行而导致数据的不一致
其中隔离级别 分为 未提交(Read uncommitted) 、读提交(read committed)、可重复读(repeatable read)以及 串行化( Serializable)

持久性: 事务处理结束后,对数据的修改 就是永久的, 即便系统故障也不会丢失

一致性: 在事务开始之前和事务结束过程之后,数据库的完整性没有被破坏
( 在操作之前 对操作之后 所发生的事情 进行预期,并且在操作后,其发生的事情与预期相同)


四大属性 简称为ACID
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)


为什么要有事务?

事务 被 MySQL 编写者设计出来
本质是为了当应用程序访问数据库时,事务能简化编程模型,不需要去考虑潜在错误和并发问题
事务本质上是为应用层服务的, 而不是随着数据库天然就有的

事务的版本支持

输入 show engines \G 查询mysql支持的存储引擎


发现是支持 innodb储存引擎的,并且默认是 innodb
在comment描述中,说明支持事务
myisam 是不支持事务的


事务的提交方式

事务共有两种提交方式: 手动提交 自动提交


输入 show variables like ‘autocommit’ 查询提交方式
ON 表示 自动提交


输入 set autocommit =0; OFF表示关闭自动提交


输入 set autocommit =1; ON表示打开自动提交


事务常见操作方式

输入 set global transaction isolation level read uncommitted;
将mysql的隔离级别设置成 读未提交(read uncommitted)

再输入 select @@tx_isolation; 查询当前的隔离级别
发现隔离级别 依旧为 可重复读(repeatable read) 而不是读未提交


将隔离级别修改后 ,需要重启客户端

重启后,再次输入 select @@tx_isolation; 进行查询
发现隔离级别 已经变为 读未提交(read uncommitted)


基本操作

创建一张表 acount,其中包含 约束为主键的key 、不为空 并且默认为空字符串的name
指定长度为10 小数部分为2位 并且默认为0.0 的blance


输入 show variables like ‘autocommit’ 查询提交方式
ON 表示 自动提交
说明当前提交方式为自动提交


启动事务的方案 为 start transaction begin

在终端1 和终端2 中 分别 使用 start transaction begin 启动不同的事务


在终端1中 输入 savepoint s1 记录 保存点 s1
并向 account表中插入 数据
插入后,再次设置保存点 s2


在终端2中,输入 select * from account 查询account表的信息 就可以查到插入的数据


在终端1中,再次插入数据
在终端2中,依旧可以从表中查到数据


在终端1中,若不想把 李四插入到表中,可以进行定向回滚
输入 rollback to s2 回滚到保存点s2

在终端2中,此时再次查询account表中数据,发现只有张三存在

最终输入 commit 结束事务


在终端1中 插入数据后 , 若直接输入 rollback 则会将表中数据全部清空


若想将对应的两个插入操作,变为 持久化 保存到 mysql中
先 输入 commit 进行提交
再输入 rollback 清空表时 ,发现 表中数据依旧存在

即已经进行提交的操作, 是没办法进行回滚的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins在Linux环境下的安装与配置

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成(CI)工具,用于解决持续重复的部署、监控工作;它一个开放易用的软件平台,大大简化软件的持续集成。 安装Jenkins 1.使用docker安装 2.本地下载je…

网易有道上线“易魔声” 开源语音合成引擎 用户可免费下载使用

网易有道上线“易魔声” 开源语音合成引擎 用户可免费下载使用 刚刚,我们上线了「易魔声」开源语音合成(TTS)引擎!🎉🎉🎉 「易魔声」,是一款有道自研TTS引擎,目前支持中…

ACM练习——第一天

因为最近要去农大参加他们的算法邀请赛,然后赛制是ACM赛制的,所以我就直接很迷茫。 然后我就找到了牛客的ACM练习题,好好的练习一下ACM写法,而且我还要被迫写C,哭了。 开始钻研 1.从Java过度到C 题目源于牛客网&…

MTK手机平台充电原理

EPT GPIO初始化文件 bsp_gpio_ept_config.c 1 知识点总结 1.1 Official 参考充电电路 Figure 1-1 参考电路 VCHG:USB正极 VCDT:VCHG Charger Detect充电电压检测脚 ISENSE:充电电流检测电阻的正极 BATSNS:充电电流检测电阻的负极 …

洗地机哪个牌子最好用?洗地机怎么选?2023洗地机选购推荐

家里有小孩或者是养有宠物的都有一个深刻的体验,那就是房子每天都很乱,隔三岔五就得做一次卫生清理、地板杀菌等。如果是房屋面积太大的话,只靠自己手动清洁是非常的耗时间并且还很劳累。洗地机的出现可谓是造福人类,解脱了家庭劳…

多个微信快速同步发圈

做营销最重要的任务是什么? 毋庸置疑,就是发布朋友圈。 为什么要发圈呢? 现在社交媒体中,微信不管在生活上、工作上都是不可或缺的工具,而朋友圈是微信中社交场景之一,也是很多企业作为推广产品和服务的重…

copilot 产生 python工具函数并生成单元测试

stock.py 这个文件,我只写了注释(的开头),大部分注释内容和函数都是copilot # split a string and extract the environment variable from it # input can be , pathabc, pathabc;pathdef, pathabc;pathdef;pathghi # output i…

电商平台api接口,淘宝/天猫、1688、拼多多、亚马逊等电商数据平台api接口演示案例

API简单来说是一种数据的传输方式,使用已经开发好的API接口可以缩短项目时间,减少开发成本。 比如说数据宝平台提供的实名认证API接口,像这种实名认证类的API接口是无法自行开发的,如果自行对接部委,能否成功不说&…

利用LangChain实现RAG

检索增强生成(Retrieval-Augmented Generation, RAG)结合了搜寻检索生成能力和自然语言处理架构,透过这个架构,模型可以从外部知识库搜寻相关信息,然后使用这些信息来生成response。要完成检索增强生成主要包含四个步骤…

Android权限动态申请(包括悬浮窗)

目录 效果图 一、环境配置 二、新建工具类 三、开始使用 备注(一):用户手动设置权限 手动设置效果图 备注(二):在Fragment中如何调用动态权限申请 备注(三):悬浮窗…

软件外包开发的需求表达方法

软件开发需求的有效表达对于项目的成功至关重要。无论选择哪种需求表达方法,清晰、详细、易于理解是关键。与开发团队建立良好的沟通渠道,确保他们对需求有充分的理解,并随着项目的推进及时调整和更新需求文档。以下是一些常用的需求表达方法…

CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片

CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片 Sub-1GHz,是指小于1GHz频率的统称。Sub-1GHz无线电频段应用的主要特点:(1)频率较低波长较长,传输距离远,穿透性强;&#xff0…

互联网Java工程师面试题·微服务篇·第一弹

目录 ​编辑 1、您对微服务有何了解? 2、微服务架构有哪些优势? 3、微服务有哪些特点? 4、设计微服务的最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片&#xff0c…

本地PHP搭建简单Imagewheel私人云图床,在外远程访问——“cpolar内网穿透”

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

ceph的体系结构

文章目录 CephCeph的体系结构对象存储RADOSOSDOSD的状态osd状态检测 数据寻址file--->Object映射Object--->pg映射pg--->osd思考:为什么要在Object和osd之间增加一层pg的映射呢? 存储池monitormonitor与客户端的通信Monitor与osd的通信 数据操作…

Jmeter添加变量的四种方法

一、在样本中添加同请求一起发送的参数。根据服务器设置的数据类型,来添加不同类型的参数 二、用户定义的变量 1、创建:添加->配置元件->用户定义的变量 2、作用:当前的线程组内所有Sampler都可以引用变量,方便脚本更新&a…

[PyTorch][chapter 62][强化学习-基本概念]

前言: 目录: 强化学习概念 马尔科夫决策 Bellman 方程 格子世界例子 一 强化学习 强化学习 必须在尝试之后,才能发现哪些行为会导致奖励的最大化。 当前的行为可能不仅仅会影响即时奖赏,还有影响下一步奖赏和所有奖赏 强…

BUUCTF刷题十一道【缺】(10)

文章目录 EasyBypass[SCTF2019]Flag Shop[BSidesCF 2019]SVGMagic[极客大挑战 2020]Greatphp[GYCTF2020]Easyphp【留坑-反序列化】[HarekazeCTF2019]Avatar Uploader 1[FireshellCTF2020]Caas[ISITDTU 2019]EasyPHP[N1CTF 2018]eating_cms[GYCTF2020]Ez_Express【留坑-nodejs原…

Power Automate-变量和excel表数据的应用

前提表格 Power Automate连接excel请参考:SharePoint-连接Excel-CSDN博客 需求1:计算表格中某列的和 添加操作,搜索变量,选择初始化变量 添加变量的名称、类型和初始值 再新增操作,搜索Excel,点击查看更多…