[MySQL--基础]事务的基础知识

在这里插入图片描述

前言

⭐Hello!这里是欧_aita的博客。
⭐今日语录:生活中最重要的决定就是要做出决定。
⭐个人主页:欧_aita
ψ(._. )>⭐个人专栏:
数据结构与算法
MySQL数据库

在这里插入图片描述

在这里插入图片描述

事务的目录📕

  • 前言
  • 事务简介🚀
  • 事务操作🚀
    • 准备数据
    • 方式一
      • 查看/设置事务提交方式
      • 提交事务
      • 回滚事务
      • 演示
    • 方式二
      • 开启事务
    • 提交事务
      • 回滚事务
      • 演示
  • 事务四大特性(ACID)🚀
  • 并发事务问题🚀
  • 事务隔离级别🚀
    • 查看事务隔离级别
    • 设置事务隔离级别

事务简介🚀

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

在这里插入图片描述
举个例子,在银行转账的过程中,分为三步:

  • 第一步查询张三账户余额是否足够转账
  • 张三余额扣除相应数目
  • 李四银行账户余额增加相应数目

但是,如果在李四余额增加的过程中出现异常,则同时所有操作取消。
这个实例可以帮助我们有效理解事务。

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

事务操作🚀

准备数据

create table account(id int auto_increment primary key comment '主键ID' ,name varchar(10) comment '姓名' ,money int comment '余额'
)comment '账户表' ;
insert into account (id,name,money) values (null,'张三',2000),(null,'李四',2000);

方式一

查看/设置事务提交方式

SELECT @@autocommit;
SET @@autocommit;

提交事务

COMMIT;

回滚事务

ROLLBACK;

演示

1.目前账户状况
在这里插入图片描述
2.开始操作

-- 转账操作
-- 1.查询张三账户余额select  * from account where name = '张三';-- 2.将张三账户余额-1000update account set money = money - 1000 where name = '张三' ;-- 3.将李四账户余额+1000update account set money = money + 1000 where name = '李四' ;

3.转账成功
在这里插入图片描述


以上是自动提交,接下来改一下提交方式,修改为手动提交

  1. 查看提交方式
select @@autocommit;

此时值若为1,就是自动提交
在这里插入图片描述

  1. 修改为手动提交
set @@autocommit = 0;  -- 设置为手动提交

此时若值为0,就是手动提交
在这里插入图片描述
3.开始转账操作

-- 转账操作
-- 1.查询张三账户余额select  * from account where name = '张三';-- 2.将张三账户余额-1000
给出一个异常
update account set money = money - 1000 where name = '张三' ;-- 3.将李四账户余额+1000update account set money = money + 1000 where name = '李四' ;

发现有异常,此时由于还没有提交,选择回滚事务后重写编写SQL语句再提交。原本的数据不会发生变化,在最后再使用提交。

-- 回滚事务
rollback;
-- 提交事务
commit;

方式二

开启事务

START TRANSACTION;

或者

BEGIN;

两者具有相同的作用

提交事务

COMMIT;

回滚事务

ROLLBACK;

演示

start transaction ;-- 1.查询张三账户余额select  * from account where name = '张三';-- 2.将张三账户余额-1000update account set money = money - 1000 where name = '张三' ;chenxu
-- 3.将李四账户余额+1000update account set money = money + 1000 where name = '李四' ;-- 提交事务
commit;-- 回滚事务
rollback;

事务四大特性(ACID)🚀

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

并发事务问题🚀

问题描述
赃读一个事务读到另一个事务还没有提交的数据
不可重复读一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读一个事务按照条件查询数据时,没有对应的的数据行,但在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。

事务隔离级别🚀

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

从上向下,隔离级别越来越高,但是效率却越来越低。

查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别

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

在这里插入图片描述

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

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

相关文章

AV1(AOMedia Video 1) 编程指南

AV1(AOMedia Video 1)是一种开源、免专利费的视频编码格式,由AOMedia(开放媒体联盟)开发。AV1旨在提供比现有的视频编解码格式(如H.264/AVC和HEVC)更高的压缩效率,同时保持高质量视频…

ubuntu apt指令集学习心得

ubuntu apt指令集学习心得 在Ubuntu中,我们可以使用以下apt指令集来管理软件包: 1. 更新软件包列表: sudo apt update 2. 升级已安装的软件包(将系统中的所有软件包升级到最新版本): s…

Linux:缓冲区的概念理解

文章目录 缓冲区什么是缓冲区?缓冲区的意义是什么?缓冲区的刷新方式 理解缓冲区用户缓冲区和内核缓冲区缓冲区在哪里? 本篇主要总结的是关于缓冲区的概念理解,以及再次基础上对文件的常用接口进行一定程度的封装 缓冲区 什么是缓…

keil添加了头文件仍然报找不到头文件的原因

如图,我在user分组新建Item,可是keil提示头文件不存在,所有的一切设置都是对的,但就是找不到头文件,找了很久,最后才发现是user分组和文件系统中的文件夹不一致的原因。 如图,在分组的文件系统的…

微服务架构之服务发现

在微服务架构中,服务与服务之间需要通过服务发现来找到对方,以便发起请求。 所谓的服务发现就是一种自动监测并发现网络内的的服务的机制。可以调用者动态感知到网络上服务的变化。DNS就是最典型的服务发现系统了。 在微服务架构中的服务发现的工作原理…

【动态规划】03使用最小花费爬楼梯(easy1)

题目链接:leetcode使用最小花费爬楼梯 目录 题目解析: 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析: 题目让我们求达到楼梯顶部的最低花费. 由题可得: cost[i] 是从楼梯第 i 个…

【附源码】完整版,Python+Selenium+Pytest+POM自动化测试框架封装

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、测试框架简介 …

【VRTK】【VR开发】【Unity】11-甩臂移动

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 除了一般的移动能力,VRTK还提供更为沉浸的甩臂移动。 【设定摇杆输入中间件】 在Hierarchy中展开Button Input Actions,其下生成两个新的空子对象…

看图学源码之 CopyOnWriteArraySet源码分析

基本介绍 使用内部CopyOnWriteArrayList进行所有操作的Set 特点 它最适合以下应用程序:集合大小通常较小、只读操作的数量远远多于可变操作,并且您需要在遍历期间防止线程之间的干扰。它是线程安全的。突变操作( add 、 set 、 remove等&…

主动而非被动:确保网络安全运营弹性的途径

金融部门处理威胁的经验对网络安全领域的任何人都有启发——没有什么可以替代提前摆脱潜在的风险和问题。 从狂野西部的银行劫匪到勒索软件即服务 (RaaS),全球金融生态系统面临的威胁多年来发生了巨大变化。技术进步带动了金融业的快速发展,从现金交易到…

基于轻量级MnasNet模型开发构建40种常见中草药图像识别系统

文本是前文的后续: 《python基于轻量级GhostNet模型开发构建23种常见中草药图像识别系统》 前文主要是在小批量小种类数据集上尝试开发构建基于轻量级CNN模型的中草药图像识别系统,本文的初衷是想要构建一个大类别大数据集的基础,但是无奈发…

附录1、vuepress中的Markdown语法

# 一、标题 # 说明: #后面跟的内容就是标题,一个#就是一级标题,有几个#就是几级标题,例如2级标题就有两个##,markdown的2级和3级标题会默认自动作为子目录, 注意:#后面必须有个空格&#xff0…

【天线了解】2.WTW天线了解与使用

注意网段:(计算机与设备同一网段才可以通信) 1.LS28接收机使用的网段是192.168.16.X,所以电脑应该同样设置 2.WTW天线使用网段192.168.98.X 0.WTW使用原理 1.计算机控制LS28(接收机),WTW天线。 …

全志H6-ARMLinux第1天:全志概述、刷机登陆、官方外设库、蜂鸣器、超声波测距

1. 全志H616课程概述(456.01) 1.1 为什么学 学习目标依然是Linux系统,平台是ARM架构 蜂巢快递柜,配送机器人,这些应用场景用 C51、STM32 单片机无法实现第三方介入库的局限性,比如刷脸支付和公交车收费设…

《微信小程序开发从入门到实战》学习四十四

4.3 云开发文件存储 4.3.4 删除文件 在小程序端和云函数端,都可以调用API删除云空间中的文件,这两个API的参数和回调函数参数都是一样。每次调用API最多删除50个文件。使用方法如下代码所示: // 回调风格的API wx.cloud.deleteFile({ file…

python的extend函数详解

文章目录 语法功能示例例1:添加列表例2:添加元组例3:添加集合例4:添加字典(只添加键)例5:添加字符串例6:混合类型扩展例7:扩展空列表或不可迭代对象 注意事项&#xff1a…

PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境

PHP使用mkcert本地开发生成HTTPS证书 PhpEnv集成环境 前言一、介绍 mkcert二、安装/使用 mkcert1. 安装2. 使用 总结 前言 本地开发时有些功能只有在 https 证书的情况下才能使用, 例如一些 Web API 一、介绍 mkcert Github地址 mkcert 是一个制作本地可信开发证书的简单工具。…

SmartChart:一站式数据可视化解决方案

在当今的数据驱动的世界中,数据可视化已经成为了一个重要的工具,它可以帮助我们理解复杂的数据集,并从中提取有价值的信息。SmartChart就是这样一个强大的数据可视化工具,它提供了一站式的数据可视化解决方案,无论你是…

Docker实战笔记 二 Springboot Idea 插件打包

1.上传springboot的jar rootcenots-7.5:/home/code#rz -----app.jar 2.编辑Dockerfile rootcenots-7.5:/home/code#vi Dockerfile内容 FROM openjdk:8 # 作者 MAINTAINER nnd # 声明要使用的端口 EXPOSE 8080 # VOLUME 指定了临时文件目录为/tmp。# 将本地包添加到容器中并…

力扣题:字符的统计-12.7

力扣题-12.7 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:467. 环绕字符串中唯一的子字符串 解题思想:记录下以字母s[i]结尾的最大的字串个数,然后统计a-z每个字母结尾的最大字串的个数进行i相加 class Solution(object…