【MySQL】P10 事务(1)事务执行,提交与回滚

news2024/9/29 15:22:18

事务执行,提交与回滚

  • 基本概念
    • 什么是事务?
    • 什么是自动提交?
    • 错误事务案例
  • 解决方案
    • 方式一:控制事务
    • 方式二:手动提交与回滚
      • 自动提交更改为手动提交
      • 进行手动提交
      • 错误进行回滚


基本概念

什么是事务?

每一个SQL语句都是一个事务,一条SQL语句一旦执行完成,事务会自动提交。事务一旦提交,数据库表中数据就会发生变化。

然而我们希望可以控制事务,为什么?想象银行转账的场景,首先构建表:

# 构建表
create table account(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    money int comment '余额'
) comment '账户表';

# 插入值
insert into account values(null, '张三', 2000),(null,'李四',2000);

在这里插入图片描述


什么是自动提交?

每条SQL语句都是一个事务,下述两条SQL语句中(一个查询一个更新),是两个事务,执行次序如下:

select * from account where name='张三';
update account set money = money - 1000 where name='张三';

在这里插入图片描述
SQL语句执行系统默认自动提交,看似只是执行了两条SQL语句,其实实际上则是执行了两次执行两次提交

而且当且仅当提交时,才会上传至数据库,更改数据库信息。


错误事务案例

e . g . e.g. e.g. 张三给李四转账1000元,SQL中执行如下:

update account set money = money - 1000 where name='张三';
update account set money = money + 1000 where name='李四';

如果程序在第一句结束时发生异常,数据库会呈现:

已执行完成张三 money-1000,但是未执行李四 money+1000

在这里插入图片描述

这很离谱不是 ~



解决方案

事务本节内容,就是希望解决这个问题。如果发生异常,我们希望这两个 Update 事务组成的整体要么同时成功,要么同时失败。我们该如何做?


方式一:控制事务

我们通过控制事务命令:

start transaction;		# 控制事务命令
# 被控制的事务
...
commit;					# 正确即提交
rollback;				# 错误即回滚

e . g . e.g. e.g.

start transaction;
update account set money = money - 1000 where name='张三';
update account set money = money + 1000 where name='李四';
-- 正确执行
commit;
-- 错误执行
rollback;

方式二:手动提交与回滚

自动提交更改为手动提交

查看当前数据库事务提交方式:

select @@autocommit;

在这里插入图片描述

结果为1,代表当前事务自动提交。可以理解为每句SQL语句执行即提交到数据库中。

我们可以取消自动提交:

set @@autocommit = 0;

在这里我想问一个问题,若是读者可以回答这个问题正确,那么说明你对上述概念皆已理解:

在执行 set @@autocommit = 0 代码之后,若此时再执行下述代码,请问最后张三李四的money为多少?

update account set money = money - 1000 where name='张三';
update account set money = money + 1000 where name='李四';

Answer: 张三2000,李四2000

请添加图片描述

原因是因为我们取消了自动提交,所以我们即使执行了SQL语句,因为未执行提交操作,所以仍不会对数据库进行更改。


进行手动提交

那么如何在此情况下,如何进行提交?执行指令:

commit;

再次刷新数据库,即可发现变化。


错误进行回滚

如果入出现错误,那么不能提交了我们该怎么办??

我们执行回滚指令:

rollback;

回滚之后,张三和李四保持金额2000不变。

综上所述:
如果事务执行正确,我们提交 (commit)
如果事务执行发生错误,那么我们回滚 (rollback)


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

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

相关文章

Unity资源热更新框架

什么是热更新? 游戏上线后,玩家下载第一个版本(1G左右或者更大),在之后运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需…

VS2008生产动态库、静态库调用案例

静态库创建静态库打开VS2008创建项目如下&#xff1a;选择静态库创建文件// add.h #ifndef _ADD_H_ #define _ADD_H_#include <stdio.h>#ifdef __cplusplus extern "C" { #endif__declspec(dllexport) int myAdd(int a, int b);#ifdef __cplusplus } #endif#e…

Linux:IO库函数

目录标准库IO函数一、fopen二、fwrite三、fread四、fseek五、fclose在编写程序时&#xff0c;离不开IO操作&#xff0c;最常见的IO操作就是用printf函数进行打印&#xff0c;本文主要介绍的是封装后的IO库函数。 标准库IO函数 常使用的IO库函数如下&#xff1a; 函数作用fop…

u盘系统文件删除后的五种恢复方法

U盘是我们日常生活中使用较为普遍的移动存储设备&#xff0c;由于其便携性和易用性广受人们的欢迎。然而&#xff0c;在我们使用U盘的过程中&#xff0c;经常会出现误删文件的情况&#xff0c;例如本来要作为启动盘的u盘&#xff0c;误删里面的系统文件怎么办&#xff1f;当U盘…

MySQL的同步数据Replication功能

MySQL提供了Replication功能&#xff0c;可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库&#xff08;master&#xff09;&#xff0c;后者则被称从库&#xff08;slave&#xff09;。MySQL复制过程采用异步方式&#xff0c;但延时非常小&#xff0c;秒级…

C51---超声波测距

1.主要实现功能&#xff1a;当手靠近传感器时&#xff0c;灯亮&#xff1b;手离开&#xff0c;灯灭 2.器件&#xff1a;51单片机、HC-SR04超声波测距传感器 3.代码&#xff1a; #include "reg52.h" //距离小于10cm&#xff0c;D5亮&#xff0c;D6灭&#xff0c;反之…

Lombok使用@Builder无法build父类属性

文章目录问题描述解决方案使用示例lombok Builder注解和build父类属性问题1、简介2.使用3、Builder注解对类做了什么&#xff1f;问题描述 实体类使用Lombok的Builder来实现Builder模式&#xff0c;但是如果使用了extend继承&#xff0c;则子类无法通过Builder来Build父类属性…

深度学习应用技巧4-模型融合:投票法、加权平均法、集成模型法

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下&#xff0c;深度学习中的模型融合。它是将多个深度学习模型或其预测结果结合起来&#xff0c;以提高模型整体性能的一种技术。 深度学习中的模型融合技术&#xff0c;也叫做集成学习&#xff0c;是指同时使用多个…

CentOS7.5(1804)安装vsftpd(ftp)

1.准备安装包 1. vsftpd-3.0.2-29.el7_9.x86_64.rpm 2. ftp-0.17-67.el7.x86_64.rpm 可以自行下载,也可从我的博客中下载,下载传送门点 这里 2.安装vsftpd #1. 上传文件到服务器上,比如/home目录 #2. 执行以下命令安装 rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm #3. 启动vsf…

极限的无穷小和无穷大

目录 无穷小&#xff1a; 无穷大&#xff1a; 无穷小&#xff1a; 举几个无穷小量的例子&#xff1a; 以0为极限的意思就是无穷小。 注&#xff1a;无穷小是变量&#xff0c;不能把很小很小的数混为一谈。 2&#xff1a;0是可以作为无穷小的唯一的一个数。 我们进行证明&…

完整教程:使用Spring Boot实现大文件断点续传及文件校验

一、简介 随着互联网的快速发展&#xff0c;大文件的传输成为了互联网应用的重要组成部分。然而&#xff0c;由于网络不稳定等因素的影响&#xff0c;大文件的传输经常会出现中断的情况&#xff0c;这时需要重新传输&#xff0c;导致传输效率低下。 为了解决这个问题&#xff…

【敏捷开发】jenkins「CI持续集成 CD持续部署」

文章目录前言一、安装jenkins1. 部署中的痛点2. 什么是jenkins3. jenkins的安装和配置&#xff08;1&#xff09;下载&#xff08;2&#xff09;安装二、上传到运行服务器1. jenkins构建服务器流程2. 安装jenkins常用插件3. 通过freestyle构建项目4. 将构建服务器上的代码上传到…

ASA材料3D打印服务 抗紫外线材料3D打印服务 抗紫外线模型制作-CASAIM中科院广州电子

3D打印技术又称增材制造&#xff0c;通常是采用数字技术材料打印机来实现的&#xff0c;常在模具制造、工业设计等领域被用于制造模型&#xff0c;后逐渐用于一些产品的直接制造。随着 3D 打印逐渐成为主流生产流程的一部分&#xff0c;ASA抗紫外线材料应运而生。中科院广州电子…

Ubuntu 搭建NextCloud私有云盘【内网穿透远程访问】

文章目录1.前言2.本地软件安装2.1 nextcloud安装2.2 cpolar安装3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置4.公网访问测试5. 结语1.前言 对于爱好折腾的电脑爱好者来说&#xff0c;Linux是绕不开的、必须认识的系统&#xff08;大部分服务器都是采用Linux操作系统&a…

华为OD机试题,用 Java 解【数组二叉树】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

将生成的NYUv2边界GT加载到dataloader中并进行训练

由上一篇我们可以知道&#xff0c;我们生成了一个label_img文件夹&#xff0c;里面存放的是索引对应图片的filename&#xff0c;每个filename里面存放的是GT的40个通道的边缘GT。train里面是这样&#xff0c;test里面也是这样。 加载数据我们要到train文件的dataloader中&…

Azure AD 与 AWS 单一帐户SSO访问集成,超详细讲解,包括解决可能出现的错误问题

本教程介绍如何将 AWS Single-Account Access 与 Azure Active Directory (Azure AD) 相集成。 将 AWS Single-Account Access 与 Azure AD 集成后&#xff0c;可以&#xff1a; 在 Azure AD 中控制谁有权访问 AWS Single-Account Access。让用户使用其 Azure AD 帐户自动登录…

SwiftUI 常用组件和属性(SwiftUI初学笔记)

本文为初学SwiftUI笔记。记录SwiftUI常用的组件和属性。 组件 共有属性(View的属性) Image("toRight").resizable().background(.red) // 背景色.shadow(color: .black, radius: 2, x: 9, y: 15) //阴影.frame(width: 30, height: 30) // 宽高 可以只设置宽或者高.…

2023年上半年软考中/高级一起报名考试+备考学习

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

Springboot——自定义Filter使用测试总结

文章目录前言自定义过滤器并验证关于排除某些请求的方式创建测试接口请求测试验证异常过滤器的执行流程注意事项资料参考前言 在Java-web的开发领域&#xff0c;对于过滤器和拦截器用处还是很多&#xff0c;但两者的概念却极易混淆。 过滤器和拦截器都是采用AOP的核心思想&am…