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:

五、隔离级别

演示:

    

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

六、设置隔离级别

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

感恩父爱 健康同行 宁夏康源父亲节特惠普查

父亲,是那道坚实的屏障,为孩子们挡风遮雨。父亲,是那颗明亮的灯塔,为孩子们指明前进的方向。然而岁月无情,随着年龄的增长,曾经为我们遮风挡雨的父亲如今也逐渐进入了各种疾病的高发期。感恩父爱&#xff0…

linux下进度条的实现

一、代码一版 使用模块化编程 1.processbar.h #include<stdio.h> #define capacity 101 //常量使用宏定义 #define style //符号方便后续修改 extern void processbar();修饰变量的时候一定要带extern&#xff0c;修饰函数的时候可以省略&#xff0c;因为没有函数体就…

FLASH仿真EEPROM---基于智芯Z20K11XM

一、介绍 电可擦和可编程只读存储器(EEPROM)可以对字节或字编程和擦除。EEPROM中的数据即使断电也能保持&#xff0c;但Z20K1xx芯片不含EEPROM。然而&#xff0c;闪存可以通过EEPROM仿真软件来模拟EEPROM。Z20K1xx包含两个flash阵列。编程和擦除操作可以在一个数组上进行&#…

华为200人园区网有线和无线

实验描述&#xff1a; 1 内网有有线业务、内部无线、外部无线三种业误。 2 内网服务器配置静态IP&#xff0c;网关192.168.108.1。 3 sW1和R1之间使用v1an200 192.168.200.9/30 互联。 4 R2向运营商申请企业宽带并获得了1个固定公网IP&#xff1a; 200.1.1.1 子网掩码 255.255.…

双目相机测距原理

一、普通双目相机测距原理 普通双目相机具有如下特点&#xff1a;左右两个相机位于同一平面&#xff08;光轴平行&#xff09;&#xff0c;且相机参数&#xff08;焦距f&#xff09;一致。其原理图如下&#xff1a; 如图所示&#xff0c;P点为相应的物体位置&#xff0c;CL和C…

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:UseCompressedOops的作用 JVM参数-XX:UseCompressedOops的作用是启用对象指针压缩&#xff08;Ordinary Object Pointers compression&#xff09;。这一特性主要应用于64位的Java虚拟机中&#xff0c;目的是为了减少内存使用。在传统的64位系统中&#xff0c;对象…

分配自定义内存对齐的内存块的aligned_malloc实现分析

malloc一般使用当前平台默认的最大内存对齐数对齐内存&#xff0c;如MSVC在32bit下一般是8bit对齐&#xff1b;64位下则是16bit。这样对常规的数据来说没有问题。但如果我们自定义的内存对齐超出了这个范围&#xff0c;则不能直接使用malloc。当我们要分配一块具有特定内存对齐…

【乐吾乐2D可视化组态编辑器】图表动态显示

1. 添加数据 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.com/ 图表动态展示是指一个图表图元的数据属性&#xff08;一般是dataY&#xff09;绑定多个变量&#xff0c;建立通信后数据动态变化展示。 官网默认Echarts图表拖拽到画布中是已经添加了图元的da…

OpenAI CTO米拉·穆拉提谈未来:AI一年半后达到博士水平

人工智能&#xff08;AI&#xff09;领域近年来的发展迅猛&#xff0c;特别是在大语言模型&#xff08;LLM&#xff09;的进步上。最近&#xff0c;OpenAI的首席技术官&#xff08;CTO&#xff09;米拉穆拉提&#xff08;Mira Murati&#xff09;在达特茅斯学院的一次采访中&am…

【Linux】Linux基础开发工具(yum)

Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便…

​Python20 Numpy基础

NumPy&#xff08;Numerical Python&#xff09;是一个开源的Python库&#xff0c;广泛用于科学计算。它提供了一个高性能的多维数组对象&#xff0c;以及用于处理这些数组的工具和函数。NumPy是数据分析、机器学习、工程和科学研究中不可或缺的工具之一&#xff0c;因为它提供…

【数据结构与算法】最小生成树,Prim算法,Kruskal算法 详解

最小生成树的实际应用背景。 最节省经费的前提下&#xff0c;在n个城市之间建立通信联络网。 Kruskal算法&#xff08;基于并查集&#xff09; void init() {for (int i 1; i < n; i) {pre[i] i;} }ll root(ll a) {ll i a;while (pre[i] ! i) {i pre[i];}return i p…

PaddleOCR C++源码编译以及demo测试

Windows10下使用PaddleOCRc 1.所需要的环境 PaddleOCR 源码文件&#xff1a;https://gitee.com/paddlepaddle/PaddleOCR &#xff08;本文选择2.6https://github.com/PaddlePaddle/PaddleOCR/archive/refs/tags/v2.6.0.zip&#xff09; opencv库&#xff1a;https://opencv…

将 Cohere 与 Elasticsearch 结合使用

本教程中的说明向你展示了如何使用推理 API 使用 Cohere 计算嵌入并将其存储起来&#xff0c;以便在 Elasticsearch 中进行高效的向量或混合搜索。本教程将使用 Python Elasticsearch 客户端执行操作。 你将学习如何&#xff1a; 使用 Cohere 服务为文本嵌入创建推理端点&…

swiper 幻灯片

index.html <!DOCTYPE html> <html lang"en"> <head> <meta charset"utf-8"> <title>swiper全屏响应式幻灯片代码</title> <meta name"viewport" content"widthdevice-width, initial-scale1, min…

reflutter工具实践之--xx一番赏app

此文章已经录制b站视频&#xff1a; flutter逆向案例-某某一番赏_哔哩哔哩_bilibili 一、工具介绍--reFlutter 这个框架帮助 Flutter 应用逆向工程&#xff0c;使用 Flutter 库的补丁版本&#xff0c;该版本已经编译并准备好重新打包应用。此库修改了快照反序列化过程&#…

Nature推荐的三种ChatGPT论文写作指令

1. 润色学术论文 ChatGPT学术润色指令&#xff1a; “I’m writing a paper on [topic]for a leading [discipline] academic journal. WhatItried to say in the following section is [specific point]. Please rephrase itfor clarity, coherence and conciseness, ensuri…

【源码】最新源支付系统源码 V7版全开源 免授权 附搭建教程

最新源支付系统源码_V7版全开源_免授权_附详细搭建教程_站长亲测 YPay是专为个人站长打造的聚合免签系统&#xff0c;拥有卓越的性能和丰富的功能。它采用全新轻量化的界面UI&#xff0c;让您能更方便快捷地解决知识付费和运营赞助的难题。同时&#xff0c;它基于高性能的thin…

【数据结构与算法】拓扑排序,关键活动,关键路径 详解

拓扑排序算法 bool topologicalSort() {stack<int> stk;int id[N];int cnt 0;for (int i 1; i < n; i) {if (!inDeg[i]) {stk.push(i);}id[i] inDeg[i];}while (stk.size()) {int t stk.top();stk.pop();cout << t << " ";cnt;for (auto i…

Java智慧工地源码 5G智慧工地系统源码 使用SAAS部署 三维可视化管理,与一线生产过程相融合,集成数据后台,统一前端入口,呈现多方项目信息;

Java智慧工地源码 5G智慧工地系统源码 使用SAAS部署 三维可视化管理&#xff0c;与一线生产过程相融合&#xff0c;集成数据后台&#xff0c;统一前端入口&#xff0c;呈现多方项目信息; 智慧工地是指运用信息化手段&#xff0c;通过三维设计平台对工程项目进行精确设计和施工…