返回顶部
首页 > 资讯 > 数据库 >【MySQL基础教程】事务详细介绍
  • 528
分享到

【MySQL基础教程】事务详细介绍

mysqljava数据库 2023-09-04 20:09:25 528人浏览 薄情痞子
摘要

前言 本文为 【MySQL基础教程】事务 相关知识,下边将对事务简介,事务操作(包括:未控制事务,控制事务),事务四大特性,并发事务问题,事务隔离级别等进行详尽介绍~ 📌博主主页:小

前言

在这里插入图片描述

本文为 【MySQL基础教程】事务 相关知识,下边将对事务简介事务操作(包括:未控制事务控制事务),事务四大特性并发事务问题事务隔离级别等进行详尽介绍~

📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)


目录

文章标题

在这里插入图片描述

一、事务简介

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

比如: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000。 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。

在这里插入图片描述
在这里插入图片描述

正常情况: 转账这个操作, 需要分为以下这么三步来完成 , 三步完成之后, 张三减少1000, 而李四增加1000, 转账成功 :

在这里插入图片描述

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

在这里插入图片描述

为了解决上述的问题,就需要通过数据的事务来完成,我们只需要在业务逻辑执行之前开启事务,执行完毕后提交事务。如果执行过程中报错,则回滚事务,把数据恢复到事务开始之前的状态。

在这里插入图片描述

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

二、事务操作

数据准备:

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️⃣未控制事务

🍀(1)测试正常情况

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

测试完毕之后检查数据的状态, 可以看到数据操作前后是一致的。

在这里插入图片描述

🍀(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 = '李四';

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

在这里插入图片描述

2️⃣控制事务一

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

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

🍀(2)提交事务

COMMIT;

🍀(3)回滚事务

ROLLBACK;

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

3️⃣控制事务二

🍀(1)开启事务

START TRANSACTioNBEGIN ;

🍀(2)提交事务

COMMIT;

🍀(3)回滚事务

ROLLBACK;

转账案例:

-- 开启事务start transaction-- 1. 查询张三余额select * from account where name = '张三';-- 2. 张三的余额减少1000update account set money = money - 1000 where name = '张三';-- 3. 李四的余额增加1000update account set money = money + 1000 where name = '李四';-- 如果正常执行完毕, 则提交事务commit;-- 如果执行过程中报错, 则回滚事务-- rollback;

三、事务四大特性

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

上述就是事务的四大特性,简称ACID

在这里插入图片描述

四、并发事务问题

🍀(1)赃读:一个事务读到另外一个事务还没有提交的数据。

在这里插入图片描述

比如B读取到了A未提交的数据。

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

在这里插入图片描述

事务A两次读取同一条记录,但是读取到的数据却是不一样的。

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

在这里插入图片描述

五、事务隔离级别

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

隔离级别脏读不可重复读幻读
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 }

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


后记

在这里插入图片描述

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~

来源地址:https://blog.csdn.net/qq_42146402/article/details/128514941

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL基础教程】事务详细介绍

本文链接: https://lsjlt.com/news/394234.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【MySQL基础教程】事务详细介绍
    前言 本文为 【MySQL基础教程】事务 相关知识,下边将对事务简介,事务操作(包括:未控制事务,控制事务),事务四大特性,并发事务问题,事务隔离级别等进行详尽介绍~ 📌博主主页:小...
    99+
    2023-09-04
    mysql java 数据库
  • 【MySQL基础教程】DQL语句详细介绍
    前言 本文为 【MySQL基础教程】DQL语句 相关内容介绍,下边具体将对DQL语句基本语法,基础查询,条件查询,聚合函数,分组查询,排序查询,分页查询,相关案例,执行顺序等进行详尽介绍~ 📌博主主页:小新要变强 的主页 ...
    99+
    2023-08-25
    java mysql
  • mysql事务详细介绍
    目录简介事务四个特性事务隔离级别验证MVCC当前读快照读当前读、快照读、MVCC关系mvcc 解决的问题MVCC实现原理可见性规则简介 事务是由一组sql语句组成的逻辑处理单元 事务...
    99+
    2024-04-02
  • linux脚本基础详细介绍
    目录1.脚本vim环境2.shell脚本中环境的定义方法3.shell脚本中的转译字符4.脚本中变量的数组5.系统中命令的别名设定6.脚本中的传参7.脚本中的循环函数1.脚本vim环境 在脚本中通常要显示一些脚本信息,这...
    99+
    2022-06-04
    linux脚本基础 linux脚本
  • Kotlin 基础语法详细介绍
    Kotlin 基础语法详细介绍基础语法定义包名包名的定义应当在源文件的头部package my.demoimport java.util.*// ......
    99+
    2023-05-31
    kotlin 基础语法
  • JSON基础介绍与详细用法
    一、什么是JSON 1、JSON指的是JavaScript对象表示法(JavaScript Object Notation)。2、JSON是轻量级的文本数据交换格式,比XML更小、更...
    99+
    2024-04-02
  • 【MySQL进阶教程】 索引详细介绍
    前言 本文为 【MySQL进阶教程】 索引 相关知识介绍,下边具体将对索引概述,索引结构(包括:索引结构概述,二叉树,B-Tree,B+Tree,Hash),索引分类,索引语法(包括:创建索引,查看...
    99+
    2023-10-03
    mysql java 数据库
  • 【MySQL进阶教程】锁的详细介绍
    前言 本文为 【MySQL进阶教程】锁 相关知识,下边将对锁的概述,全局锁(包含全局锁的介绍,语法与特点),表级锁(包含表级锁的介绍,表锁,元数据锁,意向锁),行级锁(包含行级锁的介绍,行锁,间隙锁...
    99+
    2023-09-01
    mysql 数据库 java
  • 详细介绍windows下MySQL安装教程
    目录1、下载前需要了解的一些概念2、选择自己需要的版本3、连接MySQL服务前言: 大家好,我是小诚,这段时间在网上进行了一些面试,发现无论什么公司,数据库的面试题都是不可避免的,...
    99+
    2024-04-02
  • 【MySQL基础教程】约束的介绍与使用
    前言 本文为 【MySQL基础教程】约束 相关知识,下边将对约束概述,约束演示,外键约束(包括:外键约束介绍、外键约束语法)等内容进行详尽介绍~ 📌博主主页:小新要变强 的主页 &#...
    99+
    2023-09-04
    mysql 数据库 java
  • 【MySQL基础教程】函数的介绍与使用
    前言 本文为 【MySQL基础教程】函数的介绍与使用 相关知识,下边具体将对字符串函数,数值函数,日期函数,流程函数等进行详尽介绍~ 📌博主主页:小新要变强 的主页 👉Java全栈学习路线可参考:【Java...
    99+
    2023-08-18
    mysql 数据库 java
  • Go GORM 事务详细介绍
    目录禁用默认事务事务嵌套事务手动事务一个特殊的示例SavePoint、RollbackTo禁用默认事务 为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果...
    99+
    2024-04-02
  • Spring事务的详细介绍
    本篇内容介绍了“Spring事务的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言Spring事务管理我相信大家都用得很多,但可能...
    99+
    2023-06-04
  • MySQL基础入门教程之事务
    目录引言1、事务操作1.1 未控制事务1.2 控制事务一1.3 控制事务二2、事务的四大特性3、并发事务问题4、事务隔离级别总结引言 事务是一组操作的集合,它是一个不可分割的工作单位...
    99+
    2024-04-02
  • 【MySQL进阶教程】 存储引擎详细介绍
    前言 本文为 【MySQL进阶教程】 存储引擎 相关知识介绍,下边具体将对MySQL体系结构,存储引擎介绍,存储引擎特点(包含:InnoDB、MyISAM、Memory的特点及对比),存储引擎选择等...
    99+
    2023-08-31
    mysql java 数据库
  • socket.io学习教程之基础介绍(一)
    前言 Web端与服务器间的实时数据传输的是一个很重要的需求,但最早只能通过AJAX轮询询实现。在WebSocket标准没有推出之前,AJAX轮询是唯一可行的方式(通过Flash浏览器也可以,但这里不做讨论...
    99+
    2022-06-04
    基础 教程 socket
  • CentOS8详细安装教程--图文介绍超详细
    CentOS8详细安装教程--图文介绍超详细 目录 VMware介绍 CentOS介绍 一、下载 镜像地址:Download 这里选择阿里镜像  二、开始安装Centos8 1.【文件】----->【新建虚拟机】(快捷键:Ctrl+N) 2...
    99+
    2023-09-01
    linux 运维 服务器 centos windows
  • MySQL基础知识(一)-超详细Windows系统安装MySQL详细教程
    1.简介   原计划,今天这篇想要给小伙伴们讲解一下python操作mysql数据库,但是由于近期换了一台新的电脑,所以一看mysql数据库都没安装,所有才有了这篇文章。尽管网上不乏此类型的文章,但是刚好自己要安装,所以就总结和分享一下下了...
    99+
    2023-08-31
    mysql windows 数据库 软件测试 程序人生
  • Python基础教程,Python入门教程(超详细)
    目录为什么使用PythonPython应用场合Hello world国际化支持便易用的计算器字符串,ASCII和UNICODE使用List条件和循环语句如何定义函数文件I/O异常处理...
    99+
    2024-04-02
  • Python Matplotlib绘图基础详细教程
    目录1. 画图的基本步骤1.1一步一步看2.散点图3.条形图的绘制4.四幅子图的绘制5.饼状图的绘制6.热力图的绘制总结plt是最常用的接口 1. 画图的基本步骤 1.导入模块 import matplotlib as ...
    99+
    2022-07-01
    python 绘图库Matplotlib matplotlib绘图代码 python matplotlib画图
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作