《MySQL(六):基础篇- 事务》

news2025/2/27 1:56:32

文章目录

  • 6. 事务
    • 6.1 事务简介
    • 6.2 事务操作
      • 6.2.1 未控制事务
      • 6.2.2 控制事务一
      • 6.2.3 控制事务二
    • 6.3 事务四大特性
    • 6.4 并发事务问题
    • 6.5 事务隔离级别

6. 事务

6.1 事务简介

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系
统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
就比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加
1000。 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。
在这里插入图片描述
正常情况: 转账这个操作, 需要分为以下这么三步来完成 , 三步完成之后, 张三减少1000, 而李四
增加1000, 转账成功 :
在这里插入图片描述
在这里插入图片描述
异常情况: 转账这个操作, 也是分为以下这么三步来完成 , 在执行第三步是报错了, 这样就导致张
三减少1000块钱, 而李四的金额没变, 这样就造成了数据的不一致, 就出现问题了。
在这里插入图片描述
在这里插入图片描述
为了解决上述的问题,就需要通过数据的事务来完成,我们只需要在业务逻辑执行之前开启事务,执行
完毕后提交事务。如果执行过程中报错,则回滚事务,把数据恢复到事务开始之前的状态。

在这里插入图片描述

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

6.2 事务操作

数据准备:

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);

6.2.1 未控制事务

1). 测试正常情况

-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';

测试完毕之后检查数据的状态, 可以看到数据操作前后是一致的。
在这里插入图片描述
2). 测试异常情况

-- 1. 查询张三余额
select * from account where name = '张三';

-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
出错了....

-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';

我们把数据都恢复到2000, 然后再次一次性执行上述的SQL语句(出错了… 这句话不符合SQL语
法,执行就会报错),检查最终的数据情况, 发现数据在操作前后不一致了。

在这里插入图片描述

6.2.2 控制事务一

1). 查看/设置事务提交方式

SELECT @@autocommit ;
SET @@autocommit = 0 ;

2). 提交事务

COMMIT;

3). 回滚事务

ROLLBACK;

注意:上述的这种方式,我们是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提 交, 此时我们执行的DML语句都不会提交,
需要手动的执行commit进行提交。

6.2.3 控制事务二

1). 开启事务

START TRANSACTIONBEGIN ;

2). 提交事务

COMMIT;

3). 回滚事务

ROLLBACK;

转账案例:

-- 开启事务
start transaction

-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';

-- 如果正常执行完毕, 则提交事务
commit;

-- 如果执行过程中报错, 则回滚事务
-- rollback;

6.3 事务四大特性

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

6.4 并发事务问题

1). 赃读:一个事务读到另外一个事务还没有提交的数据。
在这里插入图片描述
比如B读取到了A未提交的数据。

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

在这里插入图片描述
事务A两次读取同一条记录,但是读取到的数据却是不一样的。

3). 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据
已经存在,好像出现了 “幻影”。
在这里插入图片描述

6.5 事务隔离级别

为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:

隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read(默认)××
Serializable×××

1). 查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

2). 设置事务隔离级别

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

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

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

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

相关文章

【机器学习】神经网络入门

神经网络 非线性假设 如果对于下图使用Logistics回归算法,如果只有x1和x2两个特征的时候,Logistics回归还是可以较好地处理的。它可以将x1和x2包含到多项式中 但是有很多问题所具有的特征远不止两个,甚至是上万个,如果我们想要…

MySQL数据库给表添加索引

说明:当数据库中的记录数过多时,查询速度会显著变慢。此时可以给表创建索引,提高查询速度。 一、创建索引前 我现在有一张表,有1000万条记录,根据username值,查询一条记录,测试下查询时间&…

赛宁网安助力智能网联汽车发展 | “饶派杯”XCTF车联网安全挑战赛圆满收官

​​ 2023年5月31日,“饶派杯”XCTF车联网安全挑战赛在江西省上饶市圆满落幕。本次大赛特邀国内21支精英战队参与比拼,参赛选手覆盖全国知名高校、自动驾驶汽车和科研院所等车联网安全人才。最终,经过9个小时激烈角逐,来自南京邮电…

chatgpt赋能python:Python自动更新技术的应用

Python自动更新技术的应用 Python是一款高效的编程语言,广泛应用于各种软件开发、数据分析及人工智能等领域。随着大数据和人工智能的快速发展,Python语言的应用也日益普及,更多的企业和个人开始使用Python编写自己的程序。而随着程序的使用…

上榜“网络安全企业科技能力百强”啦!

最新公布的《2023网络安全企业科技能力报告》显示,顶象在“2023网络安全企业科技能力百强”和“2023网络安全企业有效专利数量百强”等两个榜单中均处于前列。 《2023网络安全企业科技能力报告》由中关村网络安全与信息化产业联盟发布,旨在探究网络安全…

微信开发者工具公众号网页项目实现本地项目调试

背景 最近业务场景中有需要微信H5进行实现,需要网页授权,需要用户进行点击授权的操作,跳转一个微信公众号后台设置的授权域名下的网页后才能获取到code,其他网页授权步骤这里不进行展开,不想频繁的打包上传的服务器看实现效果,所以考虑从微信开发者工具中实现本地调试,搜索过相…

如何开发原生的 JavaScript 插件(知识点+写法)

一、前言 通过 "WWW" 原则我们来了解 JavaScript 插件这个东西 第一个 W "What" -- 是什么?什么是插件,我就不照搬书本上的抽象概念了,我个人简单理解就是,能方便实现某个功能的扩展工具.(下面我会通过简单的例子来帮助读者理解) 第二个 W "Why&q…

(9)基于发射器的调优

文章目录 前言 1 概述 2 调优值 3 用任务规划器设置 前言 你可以在飞行中使用你的遥控发射器进行广泛的参数调优。这是为那些无法使用自动调优功能的高级用户准备的,或者希望通过对每个参数的完全手动调优控制来进行微调。 1 概述 基于发射机的调优允许你在飞行…

scala内建控制结构

一、条件表达式 (一)语法格式 - if (条件) 值1 else 值2(二)执行情况 条件为真,结果是值1;条件为假,结果是值2。如果if和else的返回结果同为某种类型,那么条件表达式结果也是那种类…

Vue.js 中的 props 和 $emit 方法有什么关系?

Vue.js 中的 props 和 $emit 方法有什么关系? 在 Vue.js 中,props 和 $emit 方法是两个常用的概念。它们可以帮助开发者更方便地实现组件之间的通信。但是这两个概念有什么关系呢?本文将会详细介绍 Vue.js 中的 props 和 $emit 方法&#xf…

【LeetCode每日一题】——1475.商品折扣后的最终价格

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 栈 二【题目难度】 简单 三【题目编号】 1475.商品折扣后的最终价格 四【题目描述】 给你一…

【区块链 | EVM】深入理解学习EVM - 深入了解 Solidity:堆栈

探讨 EVM 堆栈机器,以及如何在堆栈中推入和弹出数据 原文链接: https://betterprogramming.pub/solidity-tutorial-all-about-stack-c1ec6070fe60探讨 EVM 堆栈机器,以及如何在堆栈中推入和弹出数据 图片来源:Iva Rajović on Unsplash 这是"深入Solidity数据存储位置…

A股月份效应 | Python量化A股市场魔咒,5穷6绝7翻身准确吗?| 邢不行

A股有很多广为流传的谚语,它们大多源于投资者对交易经验的总结和共识。 比如我们之前验证过的散户反买别墅靠海、跳空必回补等谚语。 今天我们要验证的,是五穷六绝七翻身这句谚语。 它的意思是A股在5月、6月可能会跌的很惨,到7月会开始反弹回…

浅谈倾斜摄影三维模型数据裁剪的应用场景

浅谈倾斜摄影三维模型数据裁剪的应用场景 倾斜摄影三维模型数据裁剪是将倾斜摄影三维模型数据中不需要的部分删除或隐藏的过程,可以提高数据处理效率和准确性。倾斜摄影三维模型数据裁剪广泛应用于建筑、城市规划、地质勘探、环境监测等领域。本文将介绍倾斜摄影三维…

基于Springboot+Vue的计算机房管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 计算机房管理系统在现…

读取所在点的像素值

由于项目需求,需要用到开源的软件开发,就开始研究GDAL,这个开源库,目前来说,调用GDAL库,最方便的语言还是python ,简单记录下,用python语言做GDAL开发的一些东西吧。一个在开发中经常…

​浅谈Vue3响应式原理与源码解读

一. 了解几个概念 什么是响应式 在开始响应式原理与源码解析之前,需要先了解一下什么是响应式?首先明确一个概念:响应式是一个过程,它有两个参与方: 触发方:数据响应方:引用数据的函数 当数据发…

微信小程序原生开发功能合集十八:系统主题及自定义主题功能实现

本章实现系统主题监听及相应处理,包括暗黑色、亮色等。并实现自定义主题控制相关功能,可通过菜单进行主题的切换。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: ht…

VUE 实现滑块验证 ①

作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f4…

2023年6月DAMA-CDGP数据治理专家认证,来这里

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…