iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >[MySQL]02关于事务的解析
  • 256
分享到

[MySQL]02关于事务的解析

数据库 2023-09-04 09:09:48 256人浏览 独家记忆
摘要

目录 原子性 一致性 持久性 隔离性 事务隔离级别 并发执行可能存在问题 脏读问题 不可重复读 幻读 难点解析 原子性 事务最核心的就是原子性 以前人们认为原子不可再分,用原子性来表示一个事务不可分割 update account

目录

原子性

一致性

持久性

隔离性

事务隔离级别

并发执行可能存在问题

脏读问题

不可重复读

幻读

难点解析


原子性

事务最核心的就是原子性
以前人们认为原子不可再分,用原子性来表示一个事务不可分割

update account set balance=balance-500 where name ="张三"
如果在此过程中数据库崩溃,那么张三扣钱而李四不加钱
update account set balance=balance+500 where name ="李四"

要么全部都不执行,要么全部都执行

事务就能保证,当执行过程中出现问题的时候,自动把前面sql执行的效果进行还原,恢复如初,回滚rollback

在事务执行过程中,Mysql才会记录每一步执行了什么,一旦有问题就回滚

事务有空间代价和时间代价,事务只有在开启状态才会消耗这些代价

如果是ctrl+z的话意味着每一步回退和记录都得消耗这个空间和时间


实际上人对SQL操作在实际运用中并不是很多,大部分都是机械在对服务器进行操作,出错概率很小,撤回机制没有必要。

开启事务:start transaction;

执行多条SQL语句

回滚或提交:rollback/commit;

除了原子性外事务还有



一致性


事务执行前后,数据处在一致状态,数据CURD对的上



持久性


事务进行的改动,都是写到硬盘,不会随着程序重启/主机重启后丢失



隔离性


多个事务,并发执行的时候,事务之间能够保持隔离,互不干扰。
同一时刻,多个客户端都给服务器提交事务,执行事务


事务隔离级别

  • read uncommitted 允许读未提交的数据,并发程度相当高,隔离性最低,可能有脏读,不可重复读,幻读的问题
  • read commited 只能读提交后的数据,相当于对写进行加,并发性开始下降,隔离性开始提高,解决了脏读的问题
  • repeatable read 读和写操作都加了锁,并发程度再降低,隔离性再提高,解决了脏读,不可重复读,可能会有幻读的问题
  • serializable 严格执行串行化,并发程度最低,隔离性最高,解决了脏读,不可重复读,幻读的问题,但效率最低

mysql默认为repeatable read
在MySQL配置文件中my.ini中进行设置,根据不同的需求场景,可以设置不同的档位

并发执行可能存在问题

脏读问题

一个事务A在修改数据同时,另一个事务B读取了数据,此时A很可能在提交的时候修改
了B读取的数据,导致事务B读取的数据为无效数据,这种错误操作就是脏读操作

解决方法:在事务提交之前,不能进行读操作,提交之后才能读
也就是对 写操作 加锁

在加锁之前,我的写操作,和同学的读操作就是完全高并发
但是并发性虽然高,隔离性却是最低的
在加锁之后,写的时候不能进行读操作,并非性降低了,隔离性提高了


不可重复读

在一个事务A中多次读取同一个数据,发现不一样


解决方法: 读数据的时候,不能修改,读加锁

引入读加锁后,并发程度进一步降低了,效率也下降了
但隔离性提高了,数据准确性也提高了


幻读

特殊的不可重复读,对A文件进行读的时候,增加了新文件B
导致读之前的结果集与读之后的结果集不同。

解决方法:

串行执行,效率最低,并发程度最低,此时,隔离性最高,数据的准确性最高。

MySQL的优化措施: REPEATABLE_READ(可重复读)+间隙锁就能解决幻读问题了,不一定要串行化 这样就构造了一个查锁吗,查的数据被锁了,不查的空数据也被锁了

间隙锁:加锁范围是被查询范围内的空隙(未填写数据的空位置),防止查询期间其他事务插入到间隙中,导致读之前的结果集与读之后的结果集不同。


上述
三种情况,不一定是bug,要根据实际需求,需要考虑对特定目标的准确性要求

衡量是不是BUG的唯一标准,就是看是否符合需求


难点解析


1.REPEATABLE_READ(可重复读)给查的数据加上锁,在事务结束之前都不能修改,以此来解决不可重复读问题

2.REPEATABLE_READ(可重复读)+间隙锁就能解决幻读问题了,不一定要串行化
这样就构造了一个查锁吗,查的数据被锁了,不查的空数据也被锁了

3.串行化就是等一个结束了再上另一个事务(类似葫芦娃救爷爷)

4.在串行化隔离级别下,读操作也会被加锁(一般是共享锁),不过在读取数据后就会放开数据,多个事务可以交替读.但是只能由一个事务改,且在写完之前都不能读


哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞捏
Thanks♪(・ω・)ノ

 

来源地址:https://blog.csdn.net/tq411810317/article/details/132400456

您可能感兴趣的文档:

--结束END--

本文标题: [MySQL]02关于事务的解析

本文链接: https://www.lsjlt.com/news/393347.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • [MySQL]02关于事务的解析
    目录 原子性 一致性 持久性 隔离性 事务隔离级别 并发执行可能存在问题 脏读问题 不可重复读 幻读 难点解析 原子性 事务最核心的就是原子性 以前人们认为原子不可再分,用原子性来表示一个事务不可分割 update account ...
    99+
    2023-09-04
    数据库
  • mysql 事务解析
    事务(transaction) 事务是业务逻辑的一个基本的单元组成。 每一个事务由一条条sql语句组成。 和事务相关的语句(insert,delete,update)这些D...
    99+
    2024-04-02
  • MySQL关于sql_mode解析与设置讲解
    昨晚在往MySQL数据库中插入一组数据时,出错了!数据库无情了给我报了个错误:ERROR 1365(22012):Division by 0;意思是说:你不可以往数据库中插入一个 除数为0的运算的结果。于是...
    99+
    2024-04-02
  • 分析MySQL中关于Bug的解决方法
    这篇文章主要介绍“分析MySQL中关于Bug的解决方法”,在日常操作中,相信很多人在分析MySQL中关于Bug的解决方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析My...
    99+
    2024-04-02
  • 深入解析MySQL 事务
    目录事务的四大特性 ( ACID )脏读不可重复读幻读MySQL的隔离级别事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 事务的四大特性 ( ACID ...
    99+
    2024-04-02
  • 关于spring事务传播行为非事务方式的理解
    目录spring事务传播行为非事务方式Spring事务理解和配置1 Spring事务1.1 事务简介1.2 事务的传播行为1.3 编程式事务(需要手动写代码,了解)1.4 声明式事务...
    99+
    2024-04-02
  • JavaScript 关于事件循环机制的刨析
    目录前言:一、事件循环和任务队列产生的原因:二、事件循环机制:三、任务队列:3.1 任务队列的类型:3.2 两者区别:3.3 更细致的事件循环过程四、强大的异步专家 process....
    99+
    2024-04-02
  • 关于js的事件循环机制剖析
    前言 众所周知, JavaScript是单线程这一核心,可是浏览器又能很好的处理异步请求,那么到底是为什么呢?其中的原理与事件循环机制大有关系。 在探索事件循环之前,我们得先了解浏览...
    99+
    2024-04-02
  • 关于spring5的那些事:@Indexed 解密
    目录哪些资源会被索引?如何使用?原理随着云原生的发展,很多技术会被重新掂量,重新定义,历来技术的发展也是遵循天时地利,以其势尽享其利。再云原生下,jdk的最大的问题在于笨重(几百mb...
    99+
    2024-04-02
  • 关于Spring的AnnotationAwareAspectJAutoProxyCreator类解析
    目录分析AbstractAutoProxyCreator类分析AbstractAdvisorAutoProxyCreator类分析AspectJAwareAdvisorAutoPro...
    99+
    2023-05-19
    Spring AutoProxy Spring AnnotationAwareAspectJAutoProxyCreator类
  • 关于MySQL与Golan分布式事务经典的七种解决方案
    目录1、基础理论1.1 事务1.2 分布式事务2、分布式事务的解决方案2.1 两阶段提交/XA2.2 SAGA2.3 TCC2.4 本地消息表2.5 事务消息2.6 最大努力通知2....
    99+
    2024-04-02
  • MySQL事务的基本概念解析
    MySQL事务的基本概念解析 MySQL是一种常用的关系型数据库管理系统,支持事务处理。事务是数据库操作的基本单位,通过事务可以保证一系列操作的原子性、一致性、隔离性和持久性。本文将详...
    99+
    2024-03-01
    mysql 事务 概念
  • mysql关于主键索引的分析
    本篇内容介绍了“mysql关于主键索引的分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!到底InnoDB...
    99+
    2024-04-02
  • 关于MySQL报警的一次分析处理详解
    最近有一个服务出现了报警,已经让我到了忍无可忍的地步,报警信息如下: Metric:mysql.innodb_row_lock_waits Tags:port=4306,servi...
    99+
    2024-04-02
  • MySQL关于事务常见的问题都有哪些呢
    这期内容当中小编将会给大家带来有关MySQL关于事务常见的问题都有哪些呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。所谓事务,是指一组相互依赖的操作单位的集合,用来保证...
    99+
    2024-04-02
  • 关于@Transactional事务表被锁的问题及解决
    目录@Transactional事务表被锁只读事务读写事务@Transactional注解乱用引发的异常@Transactional事务表被锁 通常在执行查询的时候,进行更新。数据量...
    99+
    2024-04-02
  • 关于Spring中声明式事务的使用详解
    目录一、前言 二、回顾JDBC的数据库事务 三、数据库事务隔离级别 3.1 数据库事务的基本特征3.2 详解数据库隔离级别 3.2.1 未提交读 3.2.2 读提交 3.2.3 可重...
    99+
    2024-04-02
  • 关于SQL的cast()函数解析
    注意:本文使用数据库为:mysql5.6 解析: CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。 CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。 语法: CAST (e...
    99+
    2023-04-28
    SQL cast() cast()函数
  • 关于JDBC与MySQL临时表空间的深入解析
    背景 临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,相信大家在开发中经常会遇到相关的需求,下面本文将给大家详细JDBC与MySQL临时表空间的相关内容,分享出来供大家参考学习...
    99+
    2024-04-02
  • MySQL索引事务详细解析
    目录一、索引 1.概念2.作用3.缺陷4.使用场景5.使用1.查看索引2.创建索引3.删除索引6.案例二、事务1.为什么使用事务2.事务的概念3.使用4.特性一、索引 1.概念 索...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作