MySQL事务与事务的隔离级别

MySQL事务与事务的隔离级别

  • 什么事务?
  • 事务的特点(ACID)
  • 事务的隔离级别
    • 多事务运行的并发问题
    • 隔离级别
    • repeatable read(可重复读)之 MVCC(多版本并发控制) 并发机制优化

什么事务?

事务是指一组SQL语句的集合,集合中有多条SQL语句,可以是insert、update、select、delete,希望这些SQL语句执行是一致的,作为一个整体执行。要么都成功,要么都失败。

事务的特点(ACID)

原子性(Atomicity):当前事务的操作要么同时成功,要么同时失败。原子性由 undo log 日志来保证。

一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。使用事务的最终目的,油业务代码正确逻辑保证。

隔离性(Isolation):在事务并发执行时,他们内部的操作互补干扰(指的是互不影响执行,事务执行后,数据的结果取决于事务的隔离级别)。

持久性(Durability):事务一旦提交,它对数据库的改变是永久性的。持久性由 redo log 日志来保证。

事务的隔离级别

多事务运行的并发问题

对于运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种的并发问题:

脏读(事务A读取到事务B未提交的数据):对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段。之后,若T2回滚,T1再次读取的内容就是临时且无效的
不可重复度(前后两次某一字段数据结果不一致):对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段。之后,T1再次读取同一个字段,值就不同了。
幻读(前后两次读取数据结果集不一致):对于两个事务T1,T2,T1从一个表中读取了一个字段,T2修改该字段并提交后,T1仍然读取到的是上第一次读取的值。

隔离级别

1、数据库事务的隔离性:
数据库系统必须具有隔离并发运行的各个事务的能力,使它们不会相互影响,避免各种并发问题。
2、一个事务与其他事务隔离的程度成为隔离级别,数据库规定了多种事务的隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发行就越弱
3、数据库提供的 4 种隔离级别:

隔离级别描述
read uncommitied(读未提交)允许事务读取未被其他事务提交的变更。脏读、不可重复读和幻读(脏写)问题都会出现
read commitied(读已提交)只允许事务读取已经被其他事务提交的变更。可避免脏读,但不可重复读和幻读问题依然可能出现
repeatable read(可重复读)确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新,可避免脏读不可重复读,但幻读的问题仍然存在
serializable(串行化)确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事物对该表插入、更新、删除操作,所有的并发问题都可以避免,但性能十分低下

在这里插入图片描述

4、Oracle 与 MySQL事务的隔离级别:

(1)Oracle 支持两种事务隔离级别(Oracle默认隔离级别为:READ COMMITTED

  • read uncommitied(读已提交)
  • serializable(串行化)

(2)MySQL支持以上4种事务隔离级别(MySQL 默认的隔离级别为:REPEATABLE READ

  • read uncommitied(读未提交)
  • read commitied(读已提交)
  • repeatable read(可重复读)
  • serializable(串行化)

repeatable read(可重复读)之 MVCC(多版本并发控制) 并发机制优化

参考视屏地址:https://www.bilibili.com/video/BV1TV411K7rz?p=4&vd_source=d4371d3b4f6dddfe6e6929585816cf32

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

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

相关文章

为什么要分表和分区?

目录 🥶为什么要分表和分区? 🥶分表 🥶Mysql分表分为垂直切分和水平切分 🥶分表的几种方式: 🥶mysql集群 🥶利用merge存储引擎来实现分表 🥶分区 🥶什么是分…

OpenCv之图像轮廓

目录 一、图像轮廓定义 二、绘制轮廓 三、计算轮廓面积与周长 一、图像轮廓定义 图像轮廓是具有相同颜色或灰度的连续带你的曲线.轮廓在形状分析和物体的检测和识别中很有用 轮廓的作用: 用于图形分析物体的识别与检测 注意点: 为了检测的准确性,需要先对图像…

【Apifox】国产测试工具雄起

在开发过程中,我们总是避免不了进行接口的测试, 而相比手动敲测试代码,使用测试工具进行测试更为便捷,高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman,他还拥有一个非常nb的功能, 在接…

springboot整合feign实现RPC调用,并通过Hystrix实现降级

目录 一、服务提供者 二、服务消费者 三、测试效果 四、开启Hystrix实现降级功能 feign/openfeign和dubbo是常用的微服务RPC框架,由于feigin内部已经集成ribbon,自带了负载均衡的功能,当有多个同名的服务注册到注册中心时,会根…

【已解决】哪些软件可以解压RAR文件?

RAR文件是我们日常生活及工作中经常用的压缩文件,文件压缩后可以更方便储存或者传输,后续要使用的时候再进行解压。 那RAR文件如何解压呢?哪些软件可以用来解压RAR文件?在这一方面还是小白的小伙伴可以来看看下面的分享。 解压任…

Cadence Allegro PCB设计88问解析(三十一) 之 Allegro 中 打印(Plot)设置

一个学习信号完整性仿真的layout工程师 在PCB进行投板时,往往会打印一下装备层(Assembly),给贴片,用于核对器件的信息等。下面简单介绍Allegro中打印(Plot)设置。 1. 在Allegro的菜单下选择File命令,点击Plot Setup,会…

【自动驾驶汽车量子群粒子过滤器】用于无人驾驶汽车列车定位的量子粒子滤波研究(Matlab代码实现)

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

SpringMVC学习笔记--下篇

SpringMVC学习笔记 文章目录 SpringMVC学习笔记1、JSON1.1、什么是JSON1.2、JSON 和 JavaScript 对象互转1.3、Controller返回JSON数据1.3.1、使用Jackson工具1.3.1.1、乱码问题的代码优化1.3.1.2、集合测试1.3.1.3、输出时间对象1.3.1.4、抽取为工具类 1.3.2、使用FastJson的工…

CCF真题练习:202209-1如此编码

题目背景 某次测验后,顿顿老师在黑板上留下了一串数字 23333 便飘然而去。凝望着这个神秘数字,小 P 同学不禁陷入了沉思…… 题目描述 已知某次测验包含 n 道单项选择题,其中第 i 题(1≤i≤n)有 个选项,…

Android ViewGroup onDraw为什么没调用

ViewGroup,它本身并没有任何可画的东西,它是一个透明的控件,因些并不会触发onDraw,但是你现在给LinearLayout设置一个背景色,其实这个背景色不管你设置成什么颜色,系统会认为,这个LinearLayout上…

android APP外包开发的三种方式

开发android APP有三种方式,分别是原生开发、混合开发和无代码开发,原生开发对开发者有一定要求,但用户体验好;混合开发是使用H5开发,对开发者要求相对较低;而无代码开发则是通过操作界面搭建APP&#xff0…

(数组与矩阵) 剑指 Offer 50. 第一个只出现一次的字符 ——【Leetcode每日一题】

❓ 剑指 Offer 50. 第一个只出现一次的字符 难度:简单 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 示例 1: 输入:s “abaccdeff” 输出:‘b’ 示例 2: 输入:s “”…