MySQL:简述对事务的认识

浅谈对Spring事务的认识:https://xiaoer.blog.csdn.net/article/details/80849971

一、事务的特性

事务是数据库永恒不变的话题, ACID:原子性,一致性,隔离性,持久性。
(1)原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
(2)一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
(3)隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
(4)D-持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。

四个特性,最重要的就是一致性。而一致性由原子性,隔离性,持久性来保证。
(1)原子性由 Undo log 保证。Undo Log 会保存每次变更之前的记录,从而在发生错误时进行回滚。
(2)隔离性由 MVCC 和 Lock 保证。
(3)持久性由 Redo Log 保证。每次真正修改数据之前,都会将记录写到 Redo Log 中,只有 Redo Log 写入成功,才会真正的写入到 B+ 树中,如果提交之前断电,就可以通过 Redo Log 恢复记录。

二、事务的隔离级别

MySQL数据库隔离级别:未提交读(RU)、已提交读(RC)、可重复读(RR)、串行化(serializable)。每个级别都会解决不同的问题,通常是3 个问题:脏读,不可重复读,幻读。
(1)READ_UNCOMMITTED:读未提交,最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
(2)READ_COMMITTED:读已提交,允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
(3)REPEATABLE_READ:可重复读,对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
(4)SERIALIZABLE:串行化,最高的隔离级别,完全服从ACID的隔离级别,确保阻止脏读、不可重复读以及幻读,也是最慢的事务隔离级别,因为它通常是通过完全锁定事务相关的数据库表来实现的
在这里插入图片描述
注意点:关于幻读,在数据库规范里,RR 级别会导致幻读,但是,由于 Mysql 的优化,MySql 的 RR 级别不会导致幻读:

三、事务的原理剖析

1、RU 发生脏读的原因

RU 原理是对每个更新语句的行记录进行加锁,而不是对整个事务进行加锁,所以会发生脏读。而 RC 和 RR 会对整个事务加锁。

2. RC 不能重复读的原因

RC 每次执行 SQL 语句都会生成一个新的 Read View,每次读到的都是不同的。而 RR 的事务从始至终都是使用同一个 Read View。

3、RR 不会发生幻读的原因

在使用默认的 select 时,MySql 使用 MVCC 机制保证不会幻读;当然可以使用锁,在使用锁时,例如 for update(X 锁),lock in share mode(S 锁),MySql 会使用 Next-Key Lock 来保证不会发生幻读。前者称为快照读,后者称为当前读。

参考:《MYSQL:简述多版本并发控制MVCC》

4、RR 和 Serializble 的区别

RR会造成丢失更新,Serializble可以避免这种情况。

四、事务的SQL操作

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

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

相关文章

基于麒麟信安操作系统的光伏发电功率预测系统完成大规模部署建设

麒麟信安操作系统,作为行业数智化建设的安全根基,为电力业务系统提供了稳定可靠的底层平台,在全球能源结构转型大潮中扮演着至关重要的角色。某光伏电站项目中,基于麒麟信安操作系统的光伏发电功率预测系统完成大规模部署建设&…

手机游玩植物大战僵尸杂交版V2.3.7最新版教程(文章末尾免费直接下载链接)

最新版植物大战僵尸杂交版V2.3.7手机游玩教程 【V2.3.7全面升级】植物大战僵尸杂交版:跨平台终极安装指南 - 苹果、安卓、电脑、电视兼容,界面革新,16卡槽扩展,高分辨率支持,BUG修复,畅享游戏乐趣 前言 …

Java Web —— 第九天(事务)

事务管理 & AOP 事务回顾 概念 事务 是一组操作的集合,它是一个不可分割的工作单位,这些操作 要么同时成功,要么同时失败 操作 开启事务(一组操作开始前,开启事务): start transaction / begin 提交事务(这组操作全部成功…

Word文档被锁定无法编辑怎么办?一键快速移除Word编辑限制

有没有遇到这种情况?打开Word文档后,准备对Word软件进行文档的编辑时,发现文档有部分内容无法进行编辑了,不知道怎么回事,其实这是因为无法编辑区域被锁定了,所以无法进行编辑,那么应该怎么解除…

Scrapy 分布式爬虫框架 Scrapy-Redis

github官网代码示例:https://github.com/rmax/scrapy-redis/blob/master/example-project/example/spiders/myspider_redis.py 什么是 Scrapy-Redis Scrapy-Redis 是一个基于 Scrapy 的扩展,用于实现分布式爬虫。它利用 Redis 作为分布式队列来共享待爬…

【Qt窗口】—— 浮动窗口

目录 1.1 浮动窗口的创建 1.2 设置停靠的位置 1.3 示例小结 在Qt中,浮动窗口也称之为铆接部件,俗称为子窗口,浮动窗口是通过QDockWidget类来实现浮动的功能。浮动窗口⼀般是位于核⼼部件的周围,可以有多个。 1.1 浮动窗口的…

CAD如何批量输出PDF?介绍了三种方式

CAD如何批量输出PDF?在工程设计、建筑制图以及产品设计等领域,CAD软件是不可或缺的工具。随着项目规模的扩大,如何将CAD图纸批量转换成PDF格式以便分享、打印或存档,成为了许多设计师面临的常见问题。下文将介绍三种高效的方法&am…

springboot3.x入门系列【5】支持unix sock 套接字服务

目录 一、简介 二、springBoot3.x 套接字的支持 1. 环境要求 2. springboot内置tomcat 2.1 支持unix 设置 unixDomainSocketPath 2.2 windows 下unix服务测试 3. springboot外置tomcat 3.1 tomcat 配置unix socket 套接字 3.2 启动tomcat 服务 3.3 nginx 支持unix…

SLAM学习笔记

从《slam十四讲开始》 slam十四讲推荐的其他书籍 《概率机器人》(Probabilistic robotics ) 《计算机视觉中的多视图几何》(Multiple View Geometry in Computer Vision ) 《机器人学中的状态估计》(State Estimation…

操作系统

操作系统是控制和管理计算机硬件和软件资源。 管理和控制电脑系统软硬件资源的软件叫作操作系统,操作系统是最基本、最重要的系统软件,由一组控制计算机系统并对计算机系统进行管理的程序组成,是用户与计算机硬件系统的接口,并为用…

VMware网络模式

一.VMware虚拟网络 VMware支持共创建20个虚拟网络,相当于现实生活的交换机,名称vmnet0---vmnet19 物理机用虚拟网卡和对应的虚拟网络中的虚拟机通信。 VMnet1和VMnet8这两个虚拟网卡的作用是保证windows和虚拟机可以正常通信。VMware Workstation Pro这…

python-读写Excel:xlwings库操作

几种操作Excel的python库对比 安装:pip install xlwings 目录 APP实例化对象 工作薄对象 创建工作薄 打开工作薄 工作薄属性 工作表对象 新增工作表 复制表 获取工作表对象 工作表属性 删除和清除表数据及表格式 工作表行高列宽(自动调整) 单元格对象 获取单元…

秋冬春夏,纪念在CSDN的第365天

目录 时光 收获 工作 生活 憧憬 时光 再次收到创作纪念日的消息时,已在CSDN创作和度过了一年的时光。创作,成了自己的第二工作空间,成为了日常的一种习惯。 每当看到第1篇文章的提醒消息,都会想起当时创作的初衷和情景。是一…

在手机在线预览3D模型,是如何实现的?

在手机在线预览3D模型,主要依赖于几个关键技术和步骤来实现。以下是一个概括性的流程: 一、模型上传 选择平台:首先,用户需要选择一个支持3D模型在线预览的平台,如51建模网、Sketchfab等。这些平台通常提供用户友好的…

五分钟本地部署Uptime Kuma运维监控结合内网穿透实现远程访问

文章目录 前言**主要功能**一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用本教程安装。本教程使用Docker部署服务,如何安装Docker详见: 二、Docker部署Uptime Kuma三、实现公网查看网站监控四、使用固定公网地址…

Kafka的生产者和消费者机制

目录 1.基础的客户端 1.1消息发送者的主流程 1.2消息消费者主流程 2.客户端工作机制 2.1消费者分组消费机制 2.2生产者拦截器机制 2.3消息序列化机制 2.4消息分区路由机制 2.5生产者消息缓存机制 2.6发送应答机制 2.7生产者消息幂等性 (1)生产者消息幂等性介绍 (2…

XDMA原理

目录 1. BAR Space Map2. PCIe to AXI Lite Master2.1. BAR Address to AXI Address 3. PCIe to DMA Bypass4. AXI4 Memory Mapped4.1. Register Space 5. AXI Lite Slave Configuration Interface6. MSI/MSI-X Interrupt6.1. Interrupts Configuration6.2. IRQ Module 7. IP E…

Gitlab迁移到新的服务器后点击Integrations报500错误的解决方法

目录 一、问题描述二、解决方法1.方法12.方法2(1)备份 /etc/gitlab/gitlab-secrets.json(2)进入数据库(3)查看 Project ID(4)查找 hook ID 并删除(5)申请访问令牌并执行 api 删除操作一、问题描述 Gitlab迁移到新的服务器后点击Integrations报500错误: 查后台日志…

前后端开发学习路线 囊括Dubbo、Elasticsearch等

以下都是博主本人看过后给出的推荐。 文章目录 前端入门Web开发基础(HTML、CSS、JS)写项目前置(AJAX、Vue等)开始写项目(Vue、Uniapp)重点Future 入门Java后端基础部分(Java、MySQL)…

kubectl陈述式资源管理方式、声明式资源管理

一、命令行: kubectl命令行工具 优点: 90%以上的场景都可以满足 对资源的增,删,查比较方便,对改不是很友好 缺点:命令比较冗长,复杂难记 声明方式:k8s当中的yaml文件实现资源管理----声明式 GUI:图形化工具的管理…