MySQL学习笔记------事务

事务

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

事务操作

create table account(id int comment 'ID',name varchar(10) comment '姓名',money int comment '余额'
)comment '账户';
insert into account (id, name, money) VALUES (1,'张三',2000),(2,'李四',2000);
#转账操作
update account set money=money-1000 where name='张三';
update account set money=money+1000 where name='李四';

查看/设置事务提交方式

select @@autocommit;

set @@autocommit=0;#1自动提交,0手动提交

提交事务

commit;//事务提交方式设置为手动时,操作完需要提交,否则数据不发生变化,例如:

操作前

运行以下代码

#设置提交方式
set @@autocommit=0;
#转账操作
update account set money=money-1000 where name='张三';
update account set money=money+1000 where name='李四';

 表中数据为

提交后

回滚事务

rollback;

事务出现异常时,回滚数据恢复执行前

开启事务

start transaction或begin;//此时事务为手动提交

#查看提交方式
select @@autocommit;
#设置提交方式
set @@autocommit=0;
#提交
commit ;
#开启事务
start transaction ;
#回滚事务
rollback ;

 事务四大特性

原子性:事务是不可分割的最小操作单元,要么全部成功要么全部失败

一致性:事务完成时,必须使所有数据都保持一致状态

隔离性:数据库提供的隔离机制,保证事务在不受外部并发操作影响的独立环境运行

持久性:事务一旦提交,他对数据库中的数据的改变是永久性的

并发事务问题

脏读:一个事务读到另一个事务还没有提交数据

不可重复读:一个事务先后读取同一条记录,但两次读到的数据不同,称之为不可重复读(另一个事务修改并提交)

幻读:一个事务按照条件查询数据时,没有对应数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了幻影(另一个事务先插入并提交)

事务隔离级别

打错为规避

查看事务隔离级别

select@@transaction_isolation;

设置事务隔离级别

set [session|global] transaction isolation{read uncommitted | read committed | repeatable read| serializable}      // session会话,针对当前客户端有效

#查看隔离级别
select @@transaction_isolation;
#设置隔离级别
set session transaction isolation level read committed ;

 read commited可避免脏读:

未提交:

提交后:

 read committed不能避免不可重复读

其他

 其他可以用同样方法验证

repeatable read右边修改提交,左边使用commit之前,select*from account读取表数据不变

serializable只允许一次一个事务操作,只要提交完才能下一个事务操作

注意

隔离性越高,性能越差

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

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

相关文章

如何成为一名嵌入式C语言高手?

如何成为一名嵌入式C语言高手? 嵌入式系统是当今科技领域的核心,而C语言则是嵌入式系统开发中最常用的编程语言之一。成为一名嵌入式C语言高手需要长时间的学习和实践。下面将介绍一些方法和技巧,帮助你在嵌入式C语言领域获得突出的技能和能力。 一、打…

Spring 中类似 aBbb 单字母单词序列化与反序列问题

文章目录 前言代码准备问题排查lombok自定义生成 get、set 结合源码解析使用 lombok使用 lombok 自定义生成 user 对象 get、set 方法 如何解决使用注解 JsonProperty("aTest")自定义实现符合 Spring 规范的 get set 方法 个人简介 前言 最近在使用 spring boot mvc…

Linux下Qt生成程序崩溃文件

文章目录 1.背景2.Qt编译生成程序2.1.profile模式的本质 3.执行程序,得到core文件4.代码定位4.1.直接使用gdb4.2.使用QtCreator 5.总结6.题外话6.1.profile模式和debug模式的区别 1.背景 在使用Qt时,假如在windows,当软件崩溃时,…

【整数二分】难题选讲

对应洛谷题单里面【整数二分】几道同学们不太好理解的题目,写个解析 A-1数对题目链接 实际上本题方法很多,我先说个好做的办法 我们可以用map标记所有数的个数,枚举数字A[i],在map里面查找C-A[i]数字的个数,统计答案即可&#xff…

C++11右值引用

传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特性,所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。 左值与左值引用 左值是一个表示数据的表达式(如变量名或解引用的指针)&…

Qt-线程1-Run

0. 写在前面 一个应用程序一般只有一个线程,一个线程内的操作是顺序执行的,如果有某个比较耗时间的计算或操作,比如图像处理大数据图像、网络通信中的文件传输;在一个线程内操作时,用户界面就能冻结而不能及时响应。这…

34-2 SSRF(服务器端请求伪造)漏洞 - SSRF相关函数

简介 file_get_contents(): 功能: 该函数用于将整个文件读取到一个字符串中,可以用于获取本地或远程文件的内容。风险: 如果未经验证的用户输入作为参数传递给该函数,并且允许读取远程文件,则可能导致SSRF漏洞,攻击者可以利用该漏洞读取服务器内部的文件或者执行未经授权…

C++面试经典问题

常见问题:智能指针、多态、虚函数、STL原理、链表、排序、二叉树、设计模式、线程进程、内存 对象所有权 在接触智能指针之前首先要理解对象的所有权是什么,在这之前我们总是用new和delete来进行内存的申请与释放,在这种堆内存分配的方式中…

【退役之重学Java】关于lambda表达式和函数式接口

使用 lambda 表达式为作为实参,传递给形参,形参为函数式接口,此lambda表达式没有指定类型,如何能匹配函数式接口的形参类型呢? 函数式接口作为参数,实参可以直接用lambda表达式吗,是什么原理 函…

【嵌入式DIY实例】-MODBUS串行通信

MODBUS串行通信 文章目录 MODBUS串行通信1、什么是RS-4852、MAX485 TTL转RS485转换器3、硬件准备4、代码实现4.1 主机和从机之间简单通信4.2 主/从机之间LED控制在本文中,我们将介绍如何使用 MAX485 MODBUS 在Arduino之间进行串行通信。 我们将使用 Arduino nano 板和 MODBUS …

springboot国际化多语言

1,新建国际化多语言文件 在resources目录下新建 messages.properties 其他语言的文件 编辑messages.properties文件,下方从text切换到Resource Bundle ,即可对照着编辑多语言文件 (如果没有找到Resource Bundle,先在settings->plugins中安装Resource Bundle Editor) 2,配…

ComfyUI如何操作?借鉴文章有官方ComfyUI 手册、COmfyui初学者教程等

ComfyUI 是一个基于节点的用户界面,用于构建生成图像的工作流程。它通过将不同的节点连接在一起来实现这一功能。 ComfyUI 的基本操作步骤(“精”简版) 1. 安装 ComfyUI 访问 ComfyUI 的 GitHub 页面,根据您的操作系统&#xff08…

Lumos学习王佩丰Excel第二讲:单元格格式设置

今天学会GIF录制了,分享知识会更简便一些,话不多说,开始吧~ 一、美化表格 1、设置单元格格式的路径 从菜单栏进入: 选中区域(单元格)- 右键“设置单元格格式”: 2、合并单元格 合并一行 批量…

5.3 用栈翻转数组,动态规划求斐波那契数列

5.3 用栈翻转数组,动态规划求斐波那契数列 1. 用栈翻转数组 assume cs:code,ds:data,ss:stack data segmentarr dw 1111h,2222h,3333h,4444h,5555h,6666h,7777h,8888hres db 800 dup(0) data endsstack segmentdb 100 dup(0) stack endscode segmentstart:mov ax,…

YOLOv8模型剪枝实战:Network Slimming网络瘦身方法

课程链接:YOLOv8模型剪枝实战:Network Slimming网络瘦身方法_在线视频教程-CSDN程序员研修院 YOLOv8是一个当前非常流行的目标检测器,本课程使用Network Slimming(网络瘦身)剪枝方法对YOLOv8进行模型剪枝,…

力扣347. 前 K 个高频元素

思路:记录元素出现的次数用map; 要维护前k个元素,不至于把所有元素都排序再取前k个,而是新建一个堆,用小根堆存放前k个最大的数。 为什么是小根堆?因为堆每次出数据时只出堆顶,每次把当前最小的…

手动实现Tomcat底层机制+自己设计Servlet

文章目录 1.Tomcat整体架构分析自己理解 2.第一阶段1.实现功能2.代码1.TomcatV1.java 3.调试阶段1.阻塞在readLine导致无法返回结果 4.结果演示 3.第二阶段1.实现功能2.代码1.RequestHander.java2.TomcatV2.java 3.调试阶段1.发现每次按回车会接受到两次请求 4.结果演示 4.第三…

《牛客》-C小红的字符串构造

思路:我以符合条件的最极限情况来安排回文,即两个两个字符为一组回文,保证其不参与其他回文字符串的构造,以这样子的形式输出k个,剩下的都只输出不连续的当个字符(‘a’i%26) 看不到&#xff1…

使用Python实现K近邻算法

K近邻(K-Nearest Neighbors,简称KNN)是一种简单而有效的分类和回归算法,它通过比较新样本与训练样本的距离来进行预测。在本文中,我们将使用Python来实现一个基本的K近邻算法,并介绍其原理和实现过程。 什…

[dvwa] Command Injection

命令注入 0x01 low 没有过滤,直接利用 127.0.0.1 && ip a 函数 php_uname(mode) 动态地检查服务器的操作系统 ‘s’:操作系统名称 ‘n’:网络主机名 ‘r’:操作系统发行版本号 ‘v’:操作系统版本 ‘m’&…