首页 > 数据库 >一文彻底搞懂MySQL中事务的五种分类

一文彻底搞懂MySQL中事务的五种分类

时间:2024-04-02 18:29:05浏览次数:24  
标签:事务 Transactions 数据库 回滚 五种 提交 MySQL 操作 搞懂

文章目录

1. 什么是事务

事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全部成功完成,要么全部失败回滚,从而保证数据库操作一致性和完整性的重要机制,它确保了数据库在并发环境下的正确性和可靠性。

在数据库中,事务是由一组数据库操作组成的逻辑工作单元,这些操作可以是读取数据、写入数据或者同时包含读取和写入操作。事务的四个基本特性通常被称为 ACID:

  • 原子性 (Atomicity):事务是原子性的,这意味着它要么全部执行成功,要么全部失败回滚。在事务中的操作要么全部完成,要么全部撤销,不会出现部分完成的情况。

  • 一致性 (Consistency):事务在执行之前和之后,数据库的状态必须保持一致。这意味着事务的执行不能破坏数据库的完整性约束,即使在发生故障或错误的情况下也是如此。

  • 隔离性 (Isolation):事务的执行过程中,其所做的修改对其他事务是不可见的,直到该事务提交。这保证了并发执行的事务之间不会相互影响,避免了数据不一致性的问题。

  • 持久性 (Durability):一旦事务成功提交,其对数据库的修改就是永久性的,即使系统发生故障或崩溃,这些修改也不会丢失。数据库系统必须能够保证事务的持久性,即使在异常情况下也要能够恢复数据。
    在这里插入图片描述

2. 事务的分类

从事务理论的角度来看,可以把事务分为以下几种类型

  • 扁平事务 (Flat Transactions):这是最基本的事务类型,它表示一个简单的事务单元,通常由一系列的数据库操作组成,这些操作要么全部执行成功,要么全部失败,具有原子性。

  • 带有保存点的扁平事务 (Flat Transactions with Savepoints):在扁平事务的基础上引入了保存点的概念。保存点是事务中的一个标记,允许在事务执行过程中部分提交或回滚。可以通过设置保存点来实现更灵活的事务控制。

  • 链事务 (Chained Transactions):链事务允许一个事务的提交触发另一个事务的开始。这种类型的事务通常用于需要按顺序执行的一系列操作,其中每个操作都依赖于前一个操作的结果。

  • 嵌套事务 (Nested Transactions):嵌套事务是指一个事务可以包含其他事务,形成嵌套的层次结构。内部事务可以独立于外部事务提交或回滚,但它们的提交或回滚可能会受到外部事务的影响。

  • 分布式事务 (Distributed Transactions):分布式事务涉及多个独立的数据库或系统之间的事务处理。在分布式环境中,确保事务的原子性、一致性、隔离性和持久性是一项挑战,因此需要特殊的机制来处理分布式事务。

3. 事务的详解

1.扁平事务 (Flat Transactions)

  • 这是最简单的事务类型,由一系列操作组成,没有嵌套或分支。
  • 事务从开始到结束都在同一级别,没有额外的控制结构。
  • 当所有操作成功完成时,事务提交;如果任何一个操作失败,整个事务就会回滚。

2.带有保存点的扁平事务 (Flat Transactions with Savepoints)

  • 类似于扁平事务,但允许在事务内设置保存点,以便在事务回滚时部分回滚。
  • 保存点是事务中的一个标记,允许在回滚时将事务还原到该点之前的状态。

3.链事务 (Chained Transactions)

  • 在这种类型的事务中,一个事务的结果会成为另一个事务的输入。
  • 每个事务依赖于前一个事务的结果,因此它们被链接在一起形成一个链。

4.嵌套事务 (Nested Transactions)

  • 这种事务类型允许在事务内部嵌套其他事务。
  • 内部事务的提交或回滚不会影响外部事务,但外部事务的提交或回滚会影响所有嵌套的事务。

5.分布式事务 (Distributed Transactions)

  • 这种事务类型涉及多个独立的数据库或系统之间的操作。
  • 一个分布式事务涉及跨越多个计算机或数据库的操作,并且需要确保这些操作在不同系统之间的一致性和原子性。
  • 通常使用两阶段提交协议 (Two-Phase Commit Protocol) 或三阶段提交协议 (Three-Phase Commit Protocol) 来实现分布式事务的原子性和一致性。

标签:事务,Transactions,数据库,回滚,五种,提交,MySQL,操作,搞懂
From: https://blog.csdn.net/weixin_44772566/article/details/137085914

相关文章

  • mysqlbinlog历史sql查询和恢复
    Mysql命令:查看binlog文件showbinarylogs;远程拉取binlog日志mysqlbinlog-umaxen-p-h127.0.0--read-from-remote-server--rawmysql-bin.001219>/home/mysql-bin.001218通过sql语句搜索binlog日志记录mysqlbinlog--no-defaults--base64-output=decode-rows......
  • MYSQL——多表连结查询
    分类:内联结(INNERJOIN)外联结——左外连结(LEFTJOIN)——右外联结(RIGHTJOIN)——完整联结(FILLJOIN)交叉联结(CROSSJOIN)1、DDL语句——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAU......
  • MYSQL-多表联结查询
    1、DDLCREATETABLE`result`(`rid`int(11)NOTNULLAUTO_INCREMENTCOMMENT'成绩编号',`testName`varchar(255)DEFAULTNULLCOMMENT'测试名称',`score`double(4,2)DEFAULTNULLCOMMENT'成绩',`studentId`int(11)DEFAULTNULL......
  • 【附源码】计算机毕业设计音乐豆瓣(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义音乐豆瓣是一个以音乐为主题的社交网站,用户可以在网站上分享自己喜欢的音乐、评论和推荐音乐作品,还可以与其他用户进行交流和互动。音乐豆瓣的目的是为了让更多的......
  • 【附源码】计算机毕业设计玉龙湾小区网站(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义玉龙湾小区作为一个大型的综合性社区,拥有众多的住户和商铺。为了更好地满足社区居民的需求,提高社区管理的效率和质量,建立一个专门的网站是非常必要的。这个网站可......
  • MySQL数据库报错:Can‘t read dir of ‘/etc/mysql/conf.d/‘ (Errcode: 13 - Permissi
    在进行MySQL安装或初次配置的过程中,偶尔会遇到一些让人困惑的错误信息,这些错误可能会阻碍安装过程的顺利进行。本文旨在详细探讨MySQL安装过程中可能遇到的另一个具体错误,包括该错误的表现、原因以及解决步骤,以帮助用户有效地克服安装障碍。错误描述在MySQL的安装或启动过......
  • MySQL分组查询实例
    DDL——学生表——成绩表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`ag......
  • 【附源码】计算机毕业设计银行资金账户管理系统(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义银行资金账户管理系统是一种基于互联网技术的信息化管理平台,旨在提高银行资金管理的效率和安全性。随着金融市场的快速发展和金融产品的多样化,银行资金管理面临着......
  • 【附源码】计算机毕业设计疫情居家隔离服务系统(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着新冠疫情的爆发,居家隔离成为了防控疫情的重要手段之一。然而,在实际操作中,居家隔离存在着许多问题,如隔离人员的生活保障、健康状况监测等。因此,设计并实现一个......
  • MySQL主从同步延迟Seconds_Behind_Master很大
    1.mysql> showslavestatus\G  查看延迟6天多,也是很神奇了2.查看 Master_Log_File和Relay_Master_Log_File对比,可以说明中继日志差100多位置,所有定位是中继日志问题 3.查看中继日志文件,密密麻麻的relay-bin文件 4.查看优化配置mysql>showvariableslike'%......