【MySQL事务篇】事务基础知识

news2024/11/28 16:51:33

事务基础知识

文章目录

  • 事务基础知识
    • 1. 概述
    • 2. 事务的ACID特性
    • 3. 事务的状态
    • 4. 事务的使用
      • 4.1 显式事务
      • 4.2 隐式事务
    • 5. 事务隔离级别
      • 5.1 数据并发问题
      • 5.2 SQL中的四种隔离级别

1. 概述

事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态

事务处理的原则:保证所有事务都作为 一个工作单元 来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交( commit ),那么这些修改就 永久 地保存下来;要么数据库管理系统将 放弃 所作的所有 修改 ,整个事务回滚( rollback )到最初状态。

2. 事务的ACID特性

  • 原子性(atomicity):原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚

  • 一致性(consistency):根据定义,一致性是指事务执行前后,数据从一个 合法性状态 变换到另外一个 合法性状态 。这种状态是 语义上 的而不是语法上的,跟具体的业务有关。

    • 那什么是合法的数据状态呢?满足 预定的约束 的状态就叫做合法的状态。通俗一点,这状态是由你自己来定义的(比如满足现实世界中的约束)。满足这个状态,数据就是一致的,不满足这个状态,数据就是不一致的!如果事务中的某个操作失败了,系统就会自动撤销当前正在执行的事务,返回到事务操作之前的状态;

      比如A有 200元 转账出去 300元。就能发现数据不一致了,因为余额变成了 -100元,而对于余额的状态应该要满足 余额>=0

  • 隔离性(isolation):事务的隔离性是指一个事务的执行 不能被其他事务干扰 ,即一个事务内部的操作及使用的数据对 并发 的其他事务是隔离的,并发执行的各个事务之间不能互相干扰

  • 持久性(durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是 永久性 的 ,接下来的其他操作和数据库故障不应该对其有任何影响

总结

ACID 是事务的四大特性,在这四个特性中,原子性是基础,隔离性是手段,一致性是约束条件,而持久性是我们的目的。

数据库事务,其实就是数据库设计者为了方便起见,把需要保证 原子性隔离性一致性持久性 的一个或多个数据库操作称为一个事务。

3. 事务的状态

  • 活动的(active):事务对应的数据库操作正在执行过程中
  • 部分提交的(partially committed):操作都在内存中执行,所造成的影响并 没有刷新到磁盘
  • 失败的(failed):遇到了某些错误(数据库自身的错误、操作系统错误或者直接断电等)而无法继续执行,或者人为的停止当前事务的执行
  • 中止的(aborted):当 回滚 操作执行完毕时,也就是数据库恢复到了执行事务之前的状态
  • 提交的(committed):在 部分提交的状态将数据 同步到磁盘 上之后的状态

一个基本的状态转换图如下所示:

在这里插入图片描述

图中可见,只有当事务处于 提交的 或者 中止的 状态时,一个事务的生命周期才算是结束了。对于已经提交的事务来说,该事务对数据库所做的修改将永久生效,对于处于中止状态的事务,该事务对数据库所做的所有修改都会被回滚到没执行该事务之前的状态。

4. 事务的使用

使用事务有两种方式,分别为 显式事务隐式事务

4.1 显式事务

步骤1:开启事务

mysql> BEGIN;
#或者
mysql> START TRANSACTION;

START TRANSACTION 语句相较于 BEGIN 特别之处在于,后边能跟随几个 修饰符

  • READ ONLY:标识当前事务是一个 只读事务
  • READ WRITE:标识当前事务是一个 读写事务
  • WITH CONSISTENT SNAPSHOT:启动一致性读
    • 事务一般不是在执行 BEGINSTART TRANSACTION 就开启的,而是在执行事务开启语句后的第一个SQL执行前开启的,使用WITH CONSISTENT SNAPSHOT参数即可使得事务在BEGINSTART TRANSACTION 执行时便开启,这便是该参数事务开启便带一致性快照的含义

步骤2:一系列事务中的操作(主要是DML,不含DDL)

步骤3:提交事务 或 中止事务(即回滚事务)

# 提交事务。当提交事务后,对数据库的修改是永久性的。
mysql> COMMIT;
# 回滚事务。即撤销正在进行的所有没有提交的修改
mysql> ROLLBACK;
# 将事务回滚到某个保存点,回滚保存点后事务还没到终止状态,还能继续提交或回滚。SAVEPOINT s1; 设置保存点;
mysql> ROLLBACK TO [SAVEPOINT] -- SAVEPOINT s1; 设置保存点;

4.2 隐式事务

MySQL中有一个系统变量 autocommit :默认开启;可设置为关闭,或者显式开启事务即可关闭掉自动提交事务的功能

set autocommit = false; -- true | false

MySQL在执行其他非DML语句时大部分会隐式提交当前事务,已经显式开启事务还没提交便再次开启事务会先隐式提交上个事务,再开启一个新的事务。

5. 事务隔离级别

5.1 数据并发问题

访问相同数据的事务在 不保证串行执行 的情况下可能会出现哪些问题:

  1. 脏写( Dirty Write ):A 修改了 B 修改过但还未提交的数据
  2. 脏读( Dirty Read ): A 读取了 B 修改过但还未提交的数据
  3. 不可重复读( Non-Repeatable Read ):A 读取了一个字段,B 更新了这个字段,A 再次读取该字段,值不相同了
  4. 幻读( Phantom ):A 读取了某个表的数据,B 插入了一些新的行,A再次读取该表数据,数据相比之前多了几行

5.2 SQL中的四种隔离级别

首先,因为脏写这个问题太严重了,不论是哪种隔离级别,都不允许脏写的情况发生

  1. READ UNCOMMITTED:读未提交
  2. READ COMMITTED:读已提交,这是大多数数据库系统的默认隔离级别但不是MySQL默认的
  3. REPEATABLE READ:可重复读,这是MySQL默认的隔离级别
  4. SERIALIZABLE:可串行化

MySQL对于上述4种隔离级别都是支持的,Oracle只支持 READ COMMITTEDSERIALIZABLE

#查看事务的隔离级别,不同MySQL版本中都可以使用的:
SELECT @@transaction_isolation;

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

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

相关文章

ECharts折线图去掉图例和线段上的小圆点

官方的初始效果 折线图的图例有小圆点,并且图表中也有小圆点 最终效果 去掉图例和图标中的小圆点 并且柱状图和折线图的图例要不同 代码实现 去掉图例小圆点 官方文档 itemStyle: { opacity: 0 } 折线图中的小圆点去掉 官方文档 两个代码二选一就行&#x…

uniapp小程序砸金蛋抽奖

砸之前是金蛋png图片&#xff0c;点击砸完之后切换砸金蛋动效gif图片&#xff1b; 当前代码封装为砸金蛋的组件&#xff1b; vue代码&#xff1a; <template><view class"page" v-if"merchantInfo.cdn_static"><image class"bg&qu…

实习输出(1)

一、几项注意事项 1、uTools 一款很好用的工具。里面汇聚了截图、翻译、笔记、todo等等功能&#xff0c;并且支持快捷键打开&#xff0c;方便电脑开发使用。 2、IDEA &#xff0c;因为目前主流开发都是使用IDEA。首先要熟悉最基本的IDEA的快捷键 使用&#xff0c;像进入方法&…

日本it培训学费 想去日本做IT,需要具备哪些技术?

日本的IT行业历史比较悠久&#xff0c;业务以上层前端业务为主&#xff0c;如设计和构建软件。日本IT公司组织庞大&#xff0c;行业内部有着严格的分工和部署&#xff0c;工作会被细分化&#xff0c;分配给个人的工作量不会太大&#xff0c;难度也不会很高&#xff0c;所以日本…

springboot常见网络相关错误及原因解析

在基于spring-boot开发过程尤其是上线后&#xff0c;经常出现网络相关的错误&#xff0c;令人难以琢磨和下手&#xff0c;所以就spring-boot使用过程中可能碰到的网络相关问题进行分析&#xff0c;结合网络转包、日志报错和前端输出&#xff0c;针对网络连接超时、连接被拒绝、…

vue封装独立组件:实现手写签名功能

目录 第一章 效果展示 第二章 准备工作 2.1 使用的工具vue-sign 2.1.1 安装 2.1.2 了解 2.1.3 参数说明 第三章 源代码 第一章 效果展示 第二章 准备工作 2.1 使用的工具vue-esign 2.1.1 安装 npm install vue-esign --save 2.1.2 了解 兼容pc端和移动端有对应的参…

pwn入门:详解gdb调试程序的常见命令

目录 写在开头 一、pwn题目环境的部署 二、解题思路&#xff08;不是重点&#xff09; 三、gdb的调试过程&#xff08;重点&#xff09; 完整运行过程&#xff08;run&#xff09; 调试程序&#xff08;重点&#xff09; 运行到程序的开始位置 设置断点 查看内存 …

Java Web 学习笔记(三) —— Maven 基础

目录 1 Maven 概述2 Maven 安装配置3 Maven 基本使用3.1 Maven 常用命令3.2 Maven 生命周期 4 IDEA 配置 Maven4.1 IDEA 配置 Maven 环境4.2 IDEA 创建 Maven 项目 5 依赖管理5.1 导入依赖5.2 依赖范围 1 Maven 概述 Apache Maven 是一个项目管理和构建工具&#xff0c;它基于项…

力控关节性能指标

力控关节是一种用于机器人的关节&#xff0c;具有强大的力控制能力&#xff0c;通常用于执行需要精确力量控制的任务&#xff0c;例如装配、协作操作、力导引操作等。 电机的伺服驱动器通常包括三种控制环——位置环、速度环和电流环。虽然每种控制环的目的是控制电机性能的不同…

应用在智能空调中的数字温度传感芯片

智能空调是具有自动调节功能的空调。智能空调系统能根据外界气候条件&#xff0c;按照预先设定的指标对温度、湿度、空气清洁度传感器所传来的信号进行分析、判断、及时自动打开制冷、加热、去湿及空气净化等功能的空调。适合放在卧室&#xff0c;客厅等地方。 在中央控制系统…

【网络奇遇记】那年我与计算机网络的初相识

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;《网络奇遇记》 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. 信息时代的计算机网络二. 计算网络的定义和分类三. 计算机网络的特点四. 计算机网路在信息时代的应用五…

RFID管理方案有效提升电力物资管理效率与资产安全

在电力行业&#xff0c;电力资产的管理是一项重要的任务&#xff0c;为了实现对电力资产的精细化管理、入出库监控管理、盘点管理和巡查管理等&#xff0c;电力公司多采用电力资产RFID管理系统&#xff0c;该系统能够实时监控出入库过程&#xff0c;有效防止出入库错误&#xf…

【ElasticSearch系列-05】SpringBoot整合elasticSearch

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…

从科幻走向现实,LLM Agent 做到哪一步了?

LLM 洪流滚滚&#xff0c;AI 浪潮席卷全球&#xff0c;在这不断冲击行业认知的一年中&#xff0c;Agent 以冉冉新星之态引起开发者侧目。OpenAI 科学家 Andrej Karpathy 曾言“OpenAI 在大模型领域快人一步&#xff0c;但在 Agent 领域&#xff0c;却是和大家处在同一起跑线上。…

ESP-07S烧写固件记录

一&#xff0c;固件版本。 下面是官方默认AT指令版本&#xff0c;ESP-07S 的flash大小是4MB。 AT固件汇总 | 安信可科技 (ai-thinker.com) 二&#xff0c;烧录工具。 开发工具清单 | 安信可科技 (ai-thinker.com) 三&#xff0c;下载工具及连线。 使用USB转串口工具。 四&am…

如何将立创EDA中的元器件封装快速导入到AD软件中去

在使用AD软件画PCB的时候&#xff0c;最费时间的就是找元器件的封装。有的元器件如果库里面没有封装的话还得自己手动画&#xff0c;这样会浪费很多时间。 由于立创EDA里面的元器件比较全&#xff0c;而且好多器件都带有封装。那么就可以直接将立创EDA中元器件的封装直接导入到…

项目管理工具有哪些?项目管理必备的6款软件推荐!

在现代商业环境中&#xff0c;项目管理已经成为一个不可或缺的工作流程。有效的项目管理可以提高团队的协作效率&#xff0c;促进任务分配和沟通&#xff0c;并确保项目按时交付。然而&#xff0c;随着项目越来越复杂和多样化&#xff0c;需要使用适合的软件工具来支持项目管理…

并发编程(线程基础)

线程和进程的区别并发与并行的区别线程创建方式runnable和callable的区别run()和start()的区别线程包括哪些状态&#xff0c;状态之间如何变化新建三个线程&#xff0c;如何按顺序执行notify()和notifyAll()的区别wait和sleep方法的区别如何停止一个正在运行的线程 一、线程和进…

保存修改后的图形化配置文件

37.4.5 保存修改后的图形化配置文件 如果使用 V2.4 以前的底板&#xff0c;用的是 LAN8720A 这颗 PHY 芯片&#xff0c;我们在修改网络驱动的时 候我们通过图形界面使能了 LAN8720A 的驱动&#xff0c;使能以后会在.config 中存在如下代码&#xff1a; CONFIG_SMSC_PHYy 打开 d…

基于RK3568的新能源储能能量管理系统ems

新能源储能能量管理系统&#xff08;EMS&#xff09;是一种基于现代化技术的系统&#xff0c;旨在管理并优化新能源储能设备的能量使用。 该系统通过监测、调度和控制新能源储能设备来确保能源的高效利用和可持续发展。 本文将从不同的角度介绍新能源储能能量管理系统的原理、…