系列九、事务

一、事务

1.1、概述

        事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求,即:这些操作要么同时成功,要么同时失败。 例如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加 1000。 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。

1.2、为什么需要事务

转账(理想情况):

转账这个操作, 需要按照以下三个步骤来完成:

     (1)查询张三账户余额;

     (2) 张三减少 1000;

     (3) 李四 增加1000;

转账(异常情况):

        异常情况, 也是分为以下这么三步来完成 , 在执行第三步时报错了 , 这样就导致张三减少1000 块钱 , 而李四的金额没变 , 这样就造成了数据的不一致 , 就出现问题了,如下:

解决:

        为了解决上述的问题,就需要通过数据库的事务来完成,我们只需要在业务逻辑执行之前开启事务,执行完毕后提交事务。如果执行过程中报错,则回滚事务,把数据恢复到事务开始之前的状态,这样就保证了张三和李四账户的钱是正确的了,不会出现一个账户的钱减少了,而另外一个账户的钱却没有增加的情形。

注意事项:

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

1.3、四大特性

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

1.4、案例演示

1.4.1、数据初始化

use vhr;drop table if exists account; 
create table account(id int primary key AUTO_INCREMENT comment 'ID',name varchar(10) comment '姓名',money double(10,2) comment '余额'
) comment '账户表';insert into account(name, money) VALUES ('张三',2000), ('李四',2000);

1.4.2、事务相关命令

(1)查看默认的事务提交方式(默认为1,表示自动提交)
select @@autocommit; 

(2)修改为手动提交
set @@autocommit = 0;

(3)开启事务

start transcation 或者 begin;

(4)提交事务

commit;

(5)回滚事务

rollback;

1.4.3、未控制事务案例

正常情况:

异常情况:

1.4.4、控制了事务案例

注意事项:先把张三、李四的账户金额恢复为2000元;

(1)正常执行,提交事务

(2)异常执行,回滚事务

1.5、事务并发

1.5.1、概述

        生产环境中的数据操作千变万化,尤其是对于双11、双12这种大型的,全名参与的场景,事务并发操作更是数不胜数!这就为事务的并发问题埋下了伏笔,总的来说,MySQL中的事务并发会产生3类问题,即:脏读、不可重复读、虚读(幻读)

1.5.2、脏读

        一个事务读到了另外一个事务还没有提交的数据。

1.5.2、不可重复读

        一个事务先后读取同一条记录,但两次读取数据的结果不同,称之为不可重复读。

 

1.5.3、虚读(幻读) 

        一个事务按照相同的条件查询数据,第一次查询时没有查询到,另一个事务执行完insert后,再次查询又查询到了,好像出现了幻影,称之为"虚读(幻读)"。

 

1.6、事务隔离级别

1.6.1、概述

        为了解决并发事务所引发的各种问题,在数据库中引入了事务隔离级别的功能,主要分为如下几种:

注意事项:事务隔离级别越高,数据越安全,但是性能越低!

1.6.2、事务隔离级别相关指令

(1)查看MySQL默认的事务隔离级别

select @@transaction_isolation;

(2)设置事务的隔离级别

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

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

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

相关文章

使用邮件群发平台,轻松实现高效沟通的4大优势!

新媒体带动着众多线上平台的发展,使得流量为企业带来了可观的营收。但是,随着短视频市场的饱和,想要再次获得初始时的流量就变得越发困难。在这个时候,企业不妨将眼光往邮件群发这个传统的营销方式上倾斜,特别是出海、…

数据结构之---- 动态规划

数据结构之---- 动态规划 什么是动态规划? 动态规划是一个重要的算法范式,它将一个问题分解为一系列更小的子问题,并通过存储子问题的解来避免重复计算,从而大幅提升时间效率。 在本节中,我们从一个经典例题入手&am…

盛最多水的容器

给定一个长度为 n 的整数列表 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例1&…

Python基础01-环境搭建与输入输出

零、文章目录 Python基础01-环境搭建与输入输出 1、Python概述 (1)为什么要学习Python 技术趋势:Python自带明星属性,热度稳居编程语言界前三 简单易学:开发代码少,精确表达需求逻辑;33个关…

什么是Maven?

什么是Maven 1、Maven是依赖管理、项目构建工具。 pom.xml springBoot项目的核心配置文件,pom项目对象模型、Dependency依赖管理模型。 Maven中的GAVP是指: 1、GroupId:当前工程组织id,例如:com.jd.tddl 2、ArtifactI…

IS-IS原理与配置

IS-IS原理与配置 • IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP (ConnectionL…

[ 8 种有效方法] 如何在没有备份的情况下恢复 Android 上永久删除的照片?

我们生命中最重要的时刻,但这样做有缺点,其中之一就是数据丢失的风险。您可能倾向于定期删除无意义的照片,同时保存可爱的照片,从而使您的 Android 设备井井有条。然而,有些人在删除自己珍视的图像时不小心犯了错误。您…

非递归方式遍历二叉树的原理

一、递归遍历代码 // 先序遍历 void PreOrder(BiTNode *T){if (T!NULL){visit(T); // 最简单的visit就是printf(T->data)PreOrder(T->lChild);PreOrder(T->rChild);} }// 中序遍历 void InOrder(BiTNode *T){if (T!NULL){InOrder(T->lchild);visit(T);InOrder(T-…

Linux---文本搜索命令

1. grep命令的使用 命令说明grep文本搜索 grep命令效果图: 2. grep命令选项的使用 命令选项说明-i忽略大小写-n显示匹配行号-v显示不包含匹配文本的所有行 -i命令选项效果图: -n命令选项效果图: -v命令选项效果图: 3. grep命令结合正则表达式的使用 正则表达式说明^以指…

单片机上位机(串口通讯C#)

一、简介 用C#编写了几个单片机上位机模板。可定制!!! 二、效果图

SCI一区级 | Matlab实现GWO-CNN-GRU-selfAttention多变量多步时间序列预测

SCI一区级 | Matlab实现GWO-CNN-GRU-selfAttention多变量多步时间序列预测 目录 SCI一区级 | Matlab实现GWO-CNN-GRU-selfAttention多变量多步时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现GWO-CNN-GRU-selfAttention灰狼算法优化卷积门控循环…

大数据HCIE成神之路之数据预处理(2)——异常值处理

异常值处理 1 异常值处理1.1 散点图1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 基于分类模型的异常检测1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析 1.2.2 实验思路1.…

深入了解Linux网络配置:常见面试问题及解答

学习目标: 解释Linux网络配置的重要性和作用引入常见的面试问题 学习内容: 如何查看当前系统的IP地址和网关信息? 解答:可以使用ifconfig命令来查看当前系统的IP地址和网关信息。通过运行ifconfig命令,将会列出所有可…

数字基础设施及相关产业链报告:数据要素加快推进、AI终端应用加速发展

今天分享的AI系列深度研究报告:《数字基础设施及相关产业链报告:数据要素加快推进、AI终端应用加速发展》。 (报告出品方:长城证券) 报告共计:16页 1. 行业观点 在 TMT 各子板块:电子、通信、…

【Spring】Spring中的事务

文章目录 1. Spring事务简介2. Spring事务的案例案例代码代码目录结构数据库pom.xmlResource/jdbc.propertiesconfig/SpringConfig.javaconfig/JdbcConfig.javaconfig/MyBatisConfig.javadao/AccountDao.javaservice/AccountService.javaservice/impl/AccountServiceImpl.java测…

【Mode Management】ComM详细介绍

目录 1. Introduction and functional overview 2.Dependencies to other modules 3.Functional specification 3.1 Partial Network Cluster Management 3.2 ComM channel state machine 3.2.1 Behaviour in state COMM_NO_COMMUNICATION 3.2.1.1 COMM_NO_COM_NO_PENDI…

暂退法(丢弃法)

在深度学习中,丢弃法(Dropout)是一种常用的正则化技术,旨在减少模型的过拟合现象,可能会比之前的权重衰减(Weight Decay)效果更好。通过在训练过程中随机丢弃一部分神经元,可以有效地减少神经网络中的参数依…

Python实验项目9 :网络爬虫与自动化

实验 1:爬取网页中的数据。 要求:使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 # 要求:使用 urllib 库和 requests 库分别爬取 http://www.sohu.com 首页的前 360 个字节的数据。 import urllib.r…

微服务最佳实践:构建可扩展且高效的系统

微服务架构彻底改变了现代软件开发,提供了无与伦比的敏捷性、可扩展性和可维护性。然而,有效实施微服务需要深入了解最佳实践,以充分发挥微服务的潜力,同时避免常见的陷阱。在这份综合指南中,我们将深入研究微服务的关…