MySQL数据库(五):事务

         MySQL数据库中的事务是一种用来保证一系列操作要么全部成功,要么全部取消的机制。想象一下你去超市购物,拿了很多商品,如果中途发现没带钱包,你可以放弃这次购买,所有商品会回到原位。通过事务,可以确保数据在各种情况下都保持一致和安全。本文将详细介绍MySQL事务的基本概念及其在实际应用中的重要性。理解和正确设置事务的隔离级别对数据库应用程序的性能和数据一致性至关重要。选择适合的隔离级别,既要确保数据的可靠性,又要保持系统的高效运行。

目录

一、什么是事务,为什么需要事务

二、事务四大特性(ACID)

三、隔离级别

四、事务的使用

五、隔离级别

六、设置隔离级别


一、什么是事务,为什么需要事务

       事务就是多条sql语句,要么这多条语句都执行,要么都不执行。任何一个步骤执行失败都会回滚所有步骤。

例:银行转账

1.要查看支票账户的余额是否高于转账金额

2.从支票账户余额减去转账金额

3.在储蓄账户余额加上转账金额

这三个步骤就是一个事务,任何一个执行失败就要回滚所有步骤。

二、事务四大特性(ACID)

        MySQL中的事务(Transaction)是一组操作的集合,这些操作要么全部成功,要么全部失败,是数据库操作的一个基本单位。事务具有四个关键特性,通常被称为ACID特性:

  1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会停留在中间状态。如果事务在执行过程中发生错误,所有已经执行的操作都必须撤销,数据库回到事务开始时的状态。

  2. 一致性(Consistency):事务在执行之前和执行之后,数据库的状态都必须是合法的,保持数据的一致性和完整性。事务的执行不能违反数据库的完整性约束,转账事务中,如果在第三步和第四步之间系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。

  3. 隔离性(Isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的。换句话说,同时运行的事务之间是相互隔离的,避免互相干扰。

  4. 持久性(Durability):一旦事务提交,其所做的修改就会永久保存到数据库中,即使发生系统崩溃,也不会丢失已提交的事务数据。

三、隔离级别

         隔离级别是数据库管理系统(DBMS)在并发环境下处理多个事务时,用来控制事务之间相互影响的程度。不同的隔离级别提供了不同的平衡点,在数据一致性和系统性能之间进行权衡。SQL标准定义了四种隔离级别,每种隔离级别处理事务之间的交互方式略有不同,每一种级别都规定了一个事务中所做的修改,那些在事务内和事务间是可见的。那些是不可见的,通常较低级别的隔离可以执行更高的并发,系统开销也低。

  • 未提交读(Read Uncommitted)

    • 事务可以读取其他事务尚未提交的更改。
    • 可能会导致脏读(Dirty Read),即一个事务读取了另一个事务未提交的数据,这些数据可能在随后的回滚中被撤销。
    • 适用于对数据一致性要求较低但对性能要求较高的场景。
  • 已提交读(Read Committed)

    • 事务只能读取其他事务已经提交的更改。
    • 避免了脏读问题,但可能会出现不可重复读(Non-repeatable Read)问题,即同一事务中的相同查询在不同时间可能返回不同的结果,因为在事务进行过程中,其他事务可能会提交新的更改。
    • 是许多数据库系统的默认隔离级别,兼顾了一定的一致性和性能。
  • 可重复读(Repeatable Read)

    • 确保在同一事务中多次读取同一数据时,结果是相同的,即使其他事务在此期间进行了更新。一方提交了,这一方还是看不见。
    • 避免了不可重复读问题,但可能会出现幻读(Phantom Read)问题,即一个事务在读取数据集时,另一个事务插入了新的行,使得第一次读取的结果在后续读取时发生变化。幻读、换行,即一个事务查询一个范围内的的数据,另一个事务也在这个范围内对数据进行了删除、修改,他提交之后,我们依然在另一个事务中看到的是之前的数据而不是修改后的。(面试)
    • MySQL InnoDB引擎的默认隔离级别。(面试题)
  • 可串行化(Serializable)

    • 最高的隔离级别,通过强制事务顺序执行来避免所有并发问题,包括脏读、不可重复读和幻读。
    • 事务仿佛一个接一个地执行,提供了最严格的数据一致性。
    • 性能开销最大,适用于对数据一致性要求极高且并发量较低的场景。

四、事务的使用

       

演示1:

演示2:

演示3:

注意:

      平时我们写的一条sql语句,自成一个事务,它内部会自动的先执行begin,sql语句,然后执行commit进行提交;不给你选择的机会。 如果我们在执行sql语句前,手动加上begin, 执行sql语句后,就必须要我们手动加上commit语句了,这样才会向数据库提交。

演示4:

五、隔离级别

演示:

    

       进行其他增删改操作,实际效果也是一样的,即使这边已经提交到数据库,另一边还是无法看到!!!每次读取到的记录都是一样的,这就是可重复读,这样就保证这边这个窗口每次读取的都是一样,但会带来幻读的问题!!!

六、设置隔离级别

至此,数据库的基本就已经介绍完毕,感谢大家的阅读,更多精彩内容见后期,下期再见!

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

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

相关文章

dial tcp 10.96.0.1:443: connect: no route to host

1、创建Pod一直不成功,执行kubectl describe pod runtime-java-c8b465b98-47m82 查看报错 Warning FailedCreatePodSandBox 2m17s kubelet Failed to create pod sandbox: rpc error: code Unknown desc failed to setup network for…

WebHttpServletRequestResponse(完整知识点汇总)

额外知识点 Web核心 Web 全球广域网,也成为万维网(www),可通过浏览器访问的网站 JavaWeb 使用Java技术来解决相关Web互联网领域的技术栈 JavaWeb技术栈 B/S架构:Browser/Server,即浏览器/服务器 架构模式…

Vue核心指令解析:探索MVVM与数据操作之美

文章目录 前言一、Vue.js1. MVVM模式介绍2. 单页面组件介绍及案例讲解3. 插值表达式介绍及案例讲解 二、Vue常用指令详解1. 数据绑定指令v-textv-html 2. 条件渲染指令v-ifv-show 3. 列表渲染指令v-for循环数组介绍及案例讲解循环对象介绍及案例讲解 4. 事件监听指令v-on事件修…

Python-矩阵元素定位

[题目描述] 小理得到了一个 n 行 m 列的矩阵,现在他想知道第 x 行第 y 列的值是多少,请你帮助他完成这个任务。输入格式: 第一行包含两个数 n 和m ,表示这个矩阵包含 n行 m 列。从第 2 行到第 n1 行,每行输入 m 个整数…

【JS逆向百例】某点数据逆向分析,多方法详解

前言 最近收到粉丝的私信,其在逆向某个站点时遇到了些问题,在查阅资料未果后,来询问K哥,K哥一向会尽力满足粉丝的需求。网上大多数分析该站点的教程已经不再适用,本文K哥将提供 3 种解决方案,对于 webpack…

[个人感悟] MySQL应该考察哪些问题?

前言 数据存储一直是软件开发中必不可少的一环, 从早期的文件存储txt, Excel, Doc, Access, 以及关系数据库时代的MySQL,SQL Server, Oracle, DB2, 乃至最近的大数据时代f非关系型数据库:Hadoop, HBase, MongoDB. 此外还有顺序型数据库InfluxDB, 图数据库Neo4J, 分布式数据库T…

【unity小技巧】unity事件系统创建通用的对象交互的功能

文章目录 前言实现1. **InteractEvent 类**:2. **Interact 类**:3. **Player 类**:4. **Chest 类**: 工作流程说明:开单个箱子按钮触发打开很多箱子拾取物品(传参)参考完结 前言 游戏开发过程中…

vue中用JSON格式查看数据(vue-json-viewer)

vue中把string用JSON格式展示数据 vue-json-viewer使用 官网地址:https://www.npmjs.com/package/vue-json-viewer 1. 安装插件vue-json-viewer //vue2 npm install vue-json-viewer2 --save //vue3 npm install vue-json-viewer3 --save2. 引入vue-json-viewer…

Kubernetes Dashboard

Minikube 环境搭建 Kubernetes 的基本架构 Kubernetes 声明式语言 YAML YAML操作Kubernetes核心对象 CentOs搭建Kubernetes集群 Kubernetes进阶对象Deployment、DaemonSet、Service Kubernetes进阶对象Ingress、Ingress Class、Ingress Controller Kubernetes集群部署项目实践 …

本地离线模型搭建指南-中文大语言模型底座选择依据

搭建一个本地中文大语言模型(LLM)涉及多个关键步骤,从选择模型底座,到运行机器和框架,再到具体的架构实现和训练方式。以下是一个详细的指南,帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭…

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 📚 前言 📑摘要 📑系统流程 📚 系统架构设计 📚 数据库设计 📚 系统功能的具体实现 💬 系统登录注册 系统登录 登录界面 用户添加 💬 抗疫列表展示模块 区域信息管理 …

APP自动化测试-Appium常见操作之详讲

一、基本操作 1、点击操作 示例:element.click() 针对元素进行点击操作 2、初始化:输入中文的处理 说明:如果连接的是虚拟机(真机无需加这两个参数,加上可能会影响手工输入),在初始化配置中…

【初阶数据结构】深入解析栈:探索底层逻辑

🔥引言 本篇将深入解析栈:探索底层逻辑,理解底层是如何实现并了解该接口实现的优缺点,以便于我们在编写程序灵活地使用该数据结构。 🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 &#x1…

论坛实现随机发帖的学习

1、badboy操作,录制发帖全过程,录制结果保存,生成为.jmx格式的文件 2、在Jmeter中打开该.jmx文件,重命名,便于了解步骤 3、生成结果树,查看所以步骤是否正确 4、实现随机发帖 断言:具有唯一表…

Java面试八股之什么是分布式垃圾回收

什么是分布式垃圾回收 分布式垃圾回收(Distributed Garbage Collection, DGC)是Java中一种特殊的垃圾回收机制,主要用于处理跨Java虚拟机(JVM)的远程对象引用时的内存管理问题。在分布式系统中,当一个JVM中…

yolov10打包为exe

一、前言 本节实验将官方yolov10推理程序打包为exe运行 二、代码 首先下载官方代码至本机,并使用conda创建虚拟环境,并安装好yolov10所需库 conda create --prefix E:/pyenv/myYolo10 python3.8 pip install -r requirements.txt 下载官方模型权重 …

【面试干货】Java中的四种引用类型:强引用、软引用、弱引用和虚引用

【面试干货】Java中的四种引用类型:强引用、软引用、弱引用和虚引用 1、强引用(Strong Reference)2、软引用(Soft Reference)3、弱引用(Weak Reference)4、虚引用(Phantom Reference…

在线装修管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,装修队管理,用户管理,装修管理,基础数据管理,论坛管理 前台账户功能包括:系统首页,个人中心,…

【计算机网络】[第4章 网络层][自用]

1 概述 (1)因特网使用的TCP/IP协议体系(四层)的网际层,提供的是无连接、不可靠的数据报服务; (2)ATM、帧中继、X.25的OSI体系(七层)中的网络层,提供的是面向连接的、可靠的虚电路服务。 (3)路由选择分两种: 一种是由用户or管理员人工进行配置(只适用于规…

【开发工具】git服务器端安装部署+客户端配置

自己安装一个轻量级的git服务端,仅仅作为代码维护,尤其适合个人代码管理。毕竟代码的版本管理是很有必要的。 这里把git服务端部署在centos系统里,部署完成后可以通过命令行推拉代码,进行版本和用户管理。 一、服务端安装配置 …