【数据库三】MySQL事务

news2024/11/27 14:51:08

MySQL事务

  • 1.事务的概念
  • 2.事务的ACID特点
  • 3.知识点总结

1.事务的概念

  • 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体,一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
  • 事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时,事务是最小的控制单元。
  • 事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。
  • 事务通过事务的整体性以保证数据的一致性
  • 事务能够提高在向表中更新和插入信息期间的可靠性

说白了,所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位

2.事务的ACID特点

ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的四个特性:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)。这是可靠数据库所应具备的几个特性。

原子性:指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。

  • 事务是一个完整的操作,事务的各元素是不可分的
  • 事务中的所有元素必须作为一个整体提交或回滚
  • 如果事务中的任何元素失败,则整个事务将失败。

案例:
A给B转帐100元钱的时候只执行了扣款语句,就提交了,此时如果突然断电,A账号已经发生了扣款,B账号却没收到加款,在生活中就会引起纠纷。这种情况就需要事务的原子性来保证事务要么都执行,要么就都不执行

一致性:指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏

  • 当事务完成时,数据必须处于一致状态
  • 事务开始前,数据库中存储的数据处于一致状态
  • 在正在进行的事务中,数据可能处于不一致的状态。
  • 事务成功完成时,数据必须再次回到已知的一致状态

案例:
对银行转帐事务,不管事务成功还是失败,应该保证事务结束后表中A和B的存款总额跟事务执行前一致

隔离性:指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间

  • 对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
  • 修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。
  • 也就是说并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的

当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:

(1)脏读:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据

在这里插入图片描述

(2)不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即不能读到相同的数据内容)

在这里插入图片描述

(3)幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有一个没有修改的数据行,就好象发生了幻觉一样
在这里插入图片描述

(4)丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果
在这里插入图片描述

事务的隔离级别决定了事务之间可见的级别。
MySQL事务支持如下四种隔离,用以控制事务所做的修改,并将修改通告至其它并发的事务:

隔离名称功能作用
未提交读(Read Uncommitted(RU))允许脏读,即允许一个事务可以看到其他事务未提交的修改
提交读(Read Committed(RC))允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的。防止脏读
可重复读(Repeatable Read(RR))—mysql默认的隔离级别确保如果在一个事务中执行两次相同的SELECT语句,都能得到相同的结果,不管其他事务是否提交这些修改。可以防止脏读和不可重复读
串行读(Serializable)—相当于锁表完全串行化的读,将一个事务与其他事务完全地隔离。每次读都需要获得表级共享锁,读写相互都会阻塞。可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率

在这里插入图片描述

注意: mysql默认的事务处理级别是可重复读repeatable read ,而Oracle和SQL Server是提交读read committed

3.知识点总结

在多个事务并发操作同一个表数据时,不同的隔离级别可能会出现的一致性问题:
脏读: 一个事务可以看到另一个事务没有提交的修改数据.
不可重复读: 在一个事务里的两次查询会看到数据不一致的情况,这种情况可能因为两次查询过程中间,有其它事务修改了数据并已提交.
幻读: 在一个事务里的两次查询会看到数据不一致的情况(可能是发现之前没有的数据),这种情况可能因为两次查询过程中间有其它事务插入了新的数据并已提交.
丢失更新: 一个事务修改数据并提交,可能会覆盖另一个事务修改和提交的数据 .

隔离级别:
未提交读 Read Uncommitted RU: 允许脏读、可重复读和幻读.
提交读 Read Committed RC: 不允许脏读、允许不可重复读和幻读.
可重复读 Repeatable Read RR: 不允许脏读和不可重复读;有条件的允许(Innodb不允许)幻读.
串行读 Serializable:
都不允许.

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

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

相关文章

JAVA0615_2

04JDK的下载和安装 05常用dos命令

golang-gin-mysql转gorm-struct--gen-model

背景:python-django项目用go-gin重构,数据库已存在,gin中使用gorm 所以需要工具将mysql数据库中的表结构转到orm的model中。 前提:因为国内访问github需要稳定的代理 Goproxy.cn 推荐这个 1.在项目路径中下载gen-model模块 go get -u git…

测试员怎么克服职业惯性获得成功?

长期从事质量控制的测试员,容易患上职业病——挑毛病、谈风险,踩刹车,大部分时候说的和做的都对。正所谓“手里拿个锤子,看什么都是钉子”。但事情成功者往往是那些有想法,有冲劲的乐观主义者,正所谓“悲观…

使用docker快速搭建redis哨兵模式

说明 本文主要参考: https://www.cnblogs.com/coderaniu/p/15352323.html https://developer.aliyun.com/article/892805 但是这两篇博客均缺失部分关键性细节,所以重新撰文。读者可以结合本文和上述文章一起阅读。 安装步骤 安装docker和docker-co…

【机器学习】——深度学习与神经网络

目录 引入 一、神经网络及其主要算法 1、前馈神经网络 2、感知器 3、三层前馈网络(多层感知器MLP) 4、反向传播算法 二、深度学习 1、自编码算法AutorEncoder 2、自组织编码深度网络 ①栈式AutorEncoder自动编码器 ②Sparse Coding稀疏编码 …

【Java基础学习打卡10】JDK下载与安装

目录 前言一、JDK下载1.JDK官网2.版本说明3.JDK 11下载 二、JDK安装1.JDK安装2.JDK安装目录介绍 总结 前言 本文主要介绍JDK 11 如何从官网下载,及如何在 Windows 11 系统安装,下载与安装很简单,主要是有少许的细节需要说明。 一、JDK下载 …

AI实战营第二期 第九节 《底层视觉与MMEditing》——笔记10

文章目录 AI实战营第二期 第九节 《底层视觉与MMEditing》什么是超分辨率图像分辨率的目标应用方向超分的类型单图超分的解决思路 深度学习时代的超分辨率算法SRCNNFast SRCNNSRResNet 感知损失 VS. 均方误差均方误差感知损失 对抗生成网络GAN应用于超分辨率如何学习生成器网络…

flutter:数据持久化

简单的数据持久化 保存数据到本地磁盘是应用程序常用功能之一,比如保存用户登录信息、用户配置信息等。而保存这些信息通常使用 shared_preferences,它保存数据的形式为 Key-Value(键值对),支持 Android 和 iOS。shar…

1. linux系统下在QT中配置OPenCV开发环境

1. 说明: 在Linux系统下配置OpenCV的开发环境,需要在官网上下载源码,并使用CMake工具对源码进行编译,与在Windows系统中配置相比复杂许多,本文linux系统为linux minit,opencv是最新版本4.7.0,不过对于linux和opencv的版本要求行不高。 效果展示: 2. 配置步骤: 2.1 …

深度学习(22)——YOLO系列

深度学习(22)——YOLO系列 文章目录 深度学习(22)——YOLO系列1. 物体检测方法的两种类型2. YOLO-v12.1 网络结构2.2 loss 函数2.3 NMS(非极大值抑制)2. 4 优缺点 3. YOLO v23. 1 相较于v1改进点3. 2 网络结构3.3 感受野3.4 特征融…

使用无代码工具开发一款问卷调查小程序

目录 1 创建项目2 创建页面3 创建后台4 前端调用后端5 预览总结 自2017年小程序概念提出以来,越来越多的场景已经可以在小程序上实现。比如我们在线预约、点餐、查询各类信息、购物等等。小程序的特点是不需要预先按照应用程序,使用时打开,不…

dpdk21.11 添加igb_uio模块

文章目录 前言igb_uio模块下载链接编译编译方式1:make编译方式2:mesonninja1. 解压,复制 dpdk-kmods/linux/igb_uio/ 到 dpdk-stable-21.11.4/kernel/linux/ 目录下2. vi dpdk-stable-21.11.4/kernel/linux/meson.build 4创建文件 meson.buil…

大模型入门(五)—— 基于peft微调ChatGLM模型

ChatGLM 是基于 General Language Model (GLM) 架构,针对中文问答和对话进行了优化。经过中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术,ChatGLM因为是中文大模型,在中文任务的表现要优于LLaMa,我在一…

ARP协议,带你了解ARP协议

目录 一、ARP协议概述 二、使用ARP的四种情况 三、ARP缓存 四、ARP的工作原理 1. 地址解析 2. 地址缓存 五、ARP报文格式 1. ARP请求报文格式 2. ARP响应报文格式 六、免费ARP 七、代理ARP 一、ARP协议概述 ARP(Address Resolution Protocol)地…

1、产品经理的宏观定义

什么是产品经理?为了引出来定义,我们来看一段对话,这个对话方式中的场景就是小明上了一年班,回家过年了,那亲戚可能就会会问小明在外面是做什么的? 亲戚:小明,你在外面是做什么的啊&…

# SIG Mesh协议学习

SIG Mesh协议学习 1. 简介 Bluetooth SIG组织在2017年7月17日发布了蓝牙Mesh标准. 蓝牙Mesh不同于传统Bluetooth Low Energy(BLE)协议的1对1, 1对多的通信方式, 它实现了多对多的通信. 这使得mesh网络中的各个节点之间可以相互通信. 蓝牙Mesh协议建立在BLE的物理层和链路层之…

Spark大数据处理学习笔记(3.8.2) Spark RDD典型案例-利用RDD统计每日新增用户

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/Twpwe】 文章目录 一、任务目标二、准备工作2.1 在本地创建用户文件2.2 将用户文件上传到HDFS指定位置 三、完成任务3.1 在Spark Shell里完成任务3.1.1 读取文件,得到RDD3.1.2 倒排&am…

大模型入门(一)—— LLaMa/Alpaca/Vicuna

LLaMa模型是Meta开源的大模型,模型参数从7B到65B不等,LLaMa-7B在大多数基准测试上超过了GPT3-173B,而LLaMa-65B和Chinchilla-70B、PaLM-540B相比也极具竞争力。相比于ChatGPT或者GPT4来说,LLaMa可能效果上还有差距,但相…

python3 爬虫相关学习10:RE 库/ regex /regular experssion)正则表达式学习

目录 1 关于:re / regex / regular expression 1.1 什么是正则表达式 1.2 在python中导入 re 1.3 查看regex相关信息 2 正则表达式的相关符号 2.1 行定位符 2.2 元字符 (注意是 反斜杠\) 2.3 限定符号 2.4 字符类,字符集合 需要 中括号[] 2.…

Site-to-Site VPN配置和调试实践:构建安全的远程网络连接

Site-to-Site VPN配置和调试实践:构建安全的远程网络连接 【实验目的】 理解Site to Site VPN的含义。掌握Site to Site VPN的含义。验证配置。 【实验拓扑】 实验拓扑如下图所示。 实验拓扑 设备参数表如下表所示。 设备参数表 设备 接口 IP地址 子网掩码…