事物有哪些特性 ?MySQL 如何保证事物的四大特性 ?

目录

1.事物有哪些特性

2. MySQL 如何保证事物的四大特性

3. 事物的隔离级别


1.事物有哪些特性

1.1 何为事物 ?

        事物就是把一件事情的多个步骤,多个操作,打包成一个步骤,一个操作。其中任意一个步骤执行失败,都会进行回退,使影响降到最低!

1.2 事物有四大特性

1. 原子性

        一切事务要么全部执行完,要么一个都不执行。此处的"一个都不执行"并不是真的不执行,而是通过恢复的方式,把之前操作造成的影响给还原了,我们把这个过程叫做"回滚"(rollback)。

2. 持久性 

        事务进行的操作都会存储在磁盘上,只要事务执行成功,就是持久化的保存了。

3. 隔离性

        描述多个事务并发执行的时候,所产生的影响。隔离性可以防止并发执行的事物之间产生脏读,不可重复读和幻读问题。

4. 一致性

        事物执行前后,数据库的完整性约束没有被破坏。例如张三给李四转账,无论事物书否执行成功,最终张三和李四账上的总金额保持不变。

2. MySQL 如何保证事物的四大特性

        如果面试官问 MySQL 事物的底层是怎么实现的,直接回答事物的底层是依赖 MySQL 的日志来实现的,如果面试官再问:MySQL 事物是怎么实现的,这个时候 99% 是指 InnoDB 引擎,因为 MyISAM 和  Memory 都是不支持事物的。所以当问到第二个问题的时候,就按照如下方式去回答.

🍁2.1 原子性是通过 undo log(回滚日志)来保证的

        InnoDB 使用 undo log 回滚日志来记录事物的增删改操作,如果事物执行失败,InnoDB 可以使用日志来撤销已经执行的操作,以确保事物的原子性。

        例如:张三转账 100 给李四,那么这个操作就会被记录到 undo log 里面,一旦事物执行失败,就会进行回滚,回滚就是拿到日志中记录张三给李四转账的操作,然后执行相反的操作即可。

🍁2.2 持久性是通过 redo log(重做日志)来保证的

        在事物提交之前,InnoDB 会将事物的修改操作先写入日志,然后再将数据写入磁盘。redo log 就类似于缓冲区的作用,这样可以减少 I/O 的次数。其次,在系统崩溃或断电的情况下,InnoDB 可以通过 redo log 来恢复数据,以确保事物的持久性。

🍁2.3 隔离性是通过 MVCC(多版本并发控制)和锁机制共同来保证的

🍁2.4 一致性是通过各种约束(主键,外键,唯一约束等)以及事物的持久性,原子性,隔离性来保证的

        MVCC 和锁机制保证隔离性请参考下一篇文章 - MVCC 是否彻底解决了事物的隔离性 ?

3. 事物的隔离级别

MySQL 事物的隔离级别分为四种:

事务隔离级别

脏读

不可重复读

幻读

性能安全性

读未提交 (READ UNCOMMITTED)

最高最高

读已提交 (READ COMMITTED)

×

较高较高

可重复读 (REPEATABLE READ)

×

×

较低较低

串行化 (SERIALIZABLE)

×

×

×

最低最低

MySQL 默认的事物隔离级别是 "可重复读",可通过下面这条 SQL 来进行查看:

select @@global.tx_isolation,@@tx_isolation;

 3.1 什么是脏读 ?

        事务 A 在执行的过程中,需要对数据进行了一系列修改操作,在完成事务之前,另一个事务 B 开启了事物,并读取了对应的数据,此时事物 B 读到的数据都是一些临时的结果,后续事物 A 修改对应的数据,此时B的读取行为就是"脏读"!

3.2 什么是不可重复读 ?(侧重于修改)

        事务 A 提交事务后,事务 B 开启事物,并执行读操作,事物 B 在执行的过程中,事物 A 再次开启事务, 修改了 B 读取的数据行,导致事物 B 后续再次读取该数据的时候,与第一次读取的结果不一致,这就是 "不可重复读问题"!

不可重复读的解决方案通常是使用行级锁或者表锁来解决~

3.3 什么是幻读 ?(侧重于新增和删除)

         事务 B 在执行过程中,事务 A 开启事物,并执行新增或删除操作,它没有修改事物 B 正在读取的数据行,但是影响到了事物 B 读取的结果集,例如:事物 B 使用 select * 查一张表的所有数据行,第一次查到是 3 行,经过事物 A 的一个新增或删除操作之后,事物 B 再次查询可能就变成了 2 行或者 4 行数据了,这个就是 "幻读" !多出来的数据也叫做幻象行。

幻读的解决方案通常是使用间隙锁来解决~(给某一个范围进行加锁)

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

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

相关文章

模拟Stevens Lewis描述的小型飞机纵向动力学的非线性动态反演控制器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

毫米波雷达成像论文阅读笔记: IEEE TPAMI 2023 | CoIR: Compressive Implicit Radar

原始笔记链接:https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486680&idx1&snedf41d4f95395d7294bc958ea68d3a68&chksmcf51be21f826373790bc6d79bcea6eb2cb3d09bb1860bba0af0fd5e60c448ca006976503e460#rd ↑ \uparrow ↑点击上述链接即…

NER(命名实体识别)的介绍与使用--附源码

概述 本文将向您简要介绍命名实体识别,这是一种用于识别文本文档中存在的实体的流行方法。本文针对 NLP 领域的初学者。在本文末尾,已经实现了预训练的 NER 模型来展示实际用例。 为什么是NER? 图1 通过观察上

cad图怎么转换成pdf格式?一招教你轻松转换

将CAD文件转换成PDF格式有很多优势。首先,PDF格式是一种非常流行的文件格式,几乎所有电脑上都可以打开。这意味着即使将PDF文件发送给其他人,他们也可以轻松地查看文件,此外,PDF格式可以保留CAD文件的图形和布局&#…

java请求SAP系统,发起soap的xml报文,实体类转换,idea自动生成教程

1、将接口的网页地址,右键保存,然后修改文件后缀为wsdl文件 2、idea全局搜索 wsdl,找到自动转换javabean插件: 3、点击后,选择下载改完后缀的文件(选择): 4、将无用的class文件删除掉 5、请求sap的地址为…

CSS伪类:where和:is

CSS伪类:where和:is 1 :where1.1 概述1.2 组合与叠加1.3 优先级1.4 安全性1.5 兼容性 2 :is兼容性 1 :where 1.1 概述 :where()接受选择器列表作为它的参数,将会选择所有能被该选择器列表中任何一条规则选中的元素。 例如,在以下代码中,a标…

Java版 招投标系统简介 招投标系统源码 java招投标系统 招投标系统功能设计tbms

​ 项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…

英文翻译照片怎么做?掌握这个方法轻松翻译

在现代社会中,英文已经成为了一种全球性的语言,因此,我们在阅读文章或者查看图片时,经常会遇到英文的内容。为了更好地理解这些英文内容,我们需要将其翻译成中文。在本文中,我将探讨图片中英文内容翻译的方…

SpringMVC 反射型跨站点脚本攻击

解决方案&#xff1a; 服务端校验&#xff0c;添加拦截器 配置web,xml <filter><filter-name>xssFilter </filter-name><filter-class>com.fh.filter.XssFilter </filter-class></filter> XssFilter package com.fh.filter;import com…

Spring Boot

前言 什么是Spring Boot&#xff1f;为什么要学Spring Boot&#xff1f; Spring 的诞⽣是为了简化Java 程序的开发的&#xff0c;⽽Spring Boot 的诞⽣是为了简化Spring 程序开发 的。Spring就像汽车&#xff0c;相比以前人只能其自行车走路&#xff0c;汽车可以帮助人们更快…

C#__使用Type类反射数据的基本用法

// 简单介绍 // 元数据&#xff08;metadata&#xff09;&#xff1a;与程序及其类型有关的数据。 // 反射&#xff1a;一个运行的程序查看本身元数据或其他程序集中的元数据的行为 // Assembly类&#xff1a;允许访问给定程序集的元数据&#xff0c;包含了可以加载和执行程序…

数字化客户运营过程中,保险企业如何释放客户旅程编排的价值?

近两年&#xff0c;受获客成本高企、转化率却没有相应提升等因素的影响&#xff0c;越来越多的企业开始重点关注存量客户经营&#xff0c;希望尽快寻找更高效的存量线索价值挖掘路径。 在此背景下&#xff0c;某保险企业与神策数据展开深度合作&#xff0c;结合存量客户转化过程…

C语言刷题训练DAY.9

1.菱形图案 解题思路&#xff1a; 这里我们先打印上面的三角&#xff0c;再打印下面的三角。 解题代码&#xff1a; #include<stdio.h> int main() {int n 0;while ((scanf("%d", &n)) ! EOF){int i 0;for (i 0; i < n; i){//先打印上面的三角int …

Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO

前言 Livox mid360需要使用Livox-SDK2&#xff0c;而非Livox-SDK&#xff0c;以及对应的livox_ros_driver2 。并需要修改FAST_LIO中部分代码。 1. 安装Livox-SDK2 参考官方教程。 1.1. 安装CMake sudo apt install cmake1.2. 安装编译Livox-SDK2 git clone https://github…

1. HBase中文学习手册之揭开Hbase的神秘面纱

揭开Hbase的神秘面纱 1.1 欢迎使用 Apache Hbase1.1.1 什么是 Hbase?1.1.2 Hbase的前世今生1.1.3 HBase的技术选型&#xff1f;1.1.3.1 不适合使用 HBase的场景1.1.3.2 适合使用 HBase的场景 1.1.4 HBase的特点1.1.4.1 HBase的优点1.1.4.2 HBase的缺点 1.1.5 HBase设计架构 1.…

苹果电脑怎么录屏?步骤详解,看到就是赚到

苹果电脑作为一款受欢迎的高性能设备&#xff0c;不仅在日常工作中发挥着重要作用&#xff0c;还可以用于创造内容&#xff0c;如录制屏幕内容。录屏功能能够帮助用户将屏幕上的活动记录成视频&#xff0c;方便分享、演示或存档。可是您知道苹果电脑怎么录屏吗&#xff1f;通过…

Redis分布式缓存

分布式缓存 -- 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 1.Redis持久化 Redis有两种持久化方案&#xff1a; RDB持久化 AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#x…

HTTP连接管理

基础知识&#xff1a;非持久连接 HTTP初始时1.0版本在浏览器每一次向服务器请求完资源都会立即断开TCP连接&#xff0c;如果想要请求多个资源&#xff0c;就必须建立多个连接&#xff0c;这就导致了服务端和客户端维护连接的开销。 例如&#xff1a;一个网页中包含文字资源也包…

每日两题 83删除排序链表的重复元素 82删除排序链表的重复元素||

83 题目 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入&#xff1a;head [1,1,2,3,3] 输出&…

k8s service (二)

K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象&#xff0c;存储在etcd中&#xff0c;用来记录一个service对应的所有pod访问地址&#xff0c;它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成&#xff0c;这些Pod通过Endpoints…