mysql 锁 事务 脏读 不可重复读 幻读

脏读:一个事务A读取到另外一个事务B没有提交的数据,本质是事务B对其他事务可见,未提交的数据被事务A读取了(读的是别人没提交的数据)

不可重复读:同一个事务A读了一条数据读了两次,两次返回的记录数据不一样。本质是事务A多次读取,在多次读取的过程中,其他事务对该数据进行了修改。(读多次过程中别人提交了的数据)

幻读:同一个事务读了两次,两次返回的记录数量不一样。(insert从锁的角度讲,mysql行锁下无法阻塞新增行操作)

read-uncommited(不用)

read-committed解决脏读

repeatable-read解决不可重复读

serializable解决幻读


 

死锁:指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源。

死锁条件:多个事务,不一定多条sql语句,在加锁的顺序上不同,互相占用了对方的资源

死锁原因:数据冲突或者存储引擎的实现方式

mysql两种事务型存储引擎:innoDB和NDB Cluster

mysql非事务型存储引擎:myisam

在事务中混合使用存储引擎是不可靠的,正常提交没问题,如果混合使用提交后需要回滚,非事务型存储引擎无法回滚,数据与原始状态处于不一致。

innoDB采用两阶段锁定协议(two-phase locking protocol)在事务执行过程中,随时可以执行锁定,只会在commit和rollback的时候同一时刻所有的锁被释放。

在MVCC多版本并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)。

行级锁{共享锁和排他锁}

共享锁lock in share mode:多个事务只能读数据,不能改数据

排他锁for update:其他事务不能再在其上加其他的锁

MVCC多版本并发控制:

innoDB的MVCC:在每行记录后面记录两个隐藏的列,一个列记录系统版本号,另一个保存删除版本号,每个事务开始,系统版本好自动递增。
Repeatable read隔离级别下MVCC:

select:查找版本号小于等于当前版本号的数据行 and(删除版本号大于当前版本号or删除版本号未定义的数据行)

insert:为当前插入的数据行保存当前系统版本号

delete:删除的数据行保存当前系统版本号作为行删除标识

update:为插入一行新纪录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识

牺牲空间来满足性能,大多数读操作将不用加锁(注:只在RR和RC隔离级别下工作)

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

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

相关文章

leetcode 贪心(分发糖果、K次取反后最大化的数组和、加油站)

1005.K次取反后最大化的数组和 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。) 以这种方式修改数组后…

LeetCode 1599. 经营摩天轮的最大利润,简单模拟+贪心

一、题目 1、题目描述 你正在经营一座摩天轮,该摩天轮共有 4 个座舱 ,每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱,但每次轮转都需要支付一定的运行成本 runningCost 。摩天轮每次轮转都恰好转动 1 / 4 周。 给你一个长度为 n…

Linux报错:audit: backlog limit exceeded

今天,一台虚拟机上操作昨天打开的连接一直没响应,新打开连接连接不上。SSH校验不通过。 通过IT的后台,可以看到满屏的audit: backlog limit exceeded。 问题原因:audit服务记录的审计事件超出默认(或设置)数量 ,达到或…

YHZ012 Python 隐式类型转换

资源编号:YHZ012 配套视频:https://www.bilibili.com/video/BV1zy4y1Z7nk?p13 🐣 隐式类型转换 在隐式类型转换中,Python 会自动将一种数据类型转换为另一种数据类型,不需要我们去干预。 以下实例中,我们对…

生产问题一:redis锁处理幂等性失效

伪代码: Transactional(rollbackFor Exception.class)public void add(User user) {String key "key";RLock lock redissonClient.getLock(key);lock.lock();try {long count userMapper.selectCount(user);if (count 0) {userMapper.insert(user);…

边缘计算网关在温室大棚智能控制系统应用,开启农业新篇章

项目需求 ●目前大棚主要通过人为手动控温度、控水、控光照、控风,希望通过物联网技术在保障产量的前提下,提高作业效率,降低大棚总和管理成本。 ●释放部分劳动力,让农户有精力管理更多大棚,进而增加农户收入。 ●…

Python进行批量字符替换的3种方法

一、问题的提出 之前,我写过一篇如何在word中计算数学算式: 如何用Python批量计算Word中的算式-CSDN博客 为了计算算式,就需要对算式进行格式化,把不规则的算式转换成规则的算式,这时就会涉及到一些字符的批量替换。…

解决SpringBoot中出现的跨域请求问题

When allowCredentials is true, allowedOrigins cannot contain the special value "*"since that cannot be set on the “Access-Control-Allow-Origin” response header. To allow credentials to a set of origins, list them explicitly or consider using “…

如何在 Linux 中配置 firewalld 规则

什么是FirewallD “firewalld”是firewall daemon。它提供了一个动态管理的防火墙,带有一个非常强大的过滤系统,称为 Netfilter,由 Linux 内核提供。 FirewallD 使用zones和services的概念,而 iptables 使用chain和rules。与 ip…

【LLM-RAG】知识库问答 | 检索 | embedding

note RAG流程(写作论文中的background:公式设定、emb、召回内容、召回基准)(工作中的思路:嵌入模型、向量存储、向量存储检索器、LLM、query改写、RAG评测方法)仅为个人关于RAG的一些零碎总结,…

【网络面试(4)】协议栈和套接字及连接阶段的三次握手原理

1. 协议栈 一直对操作系统系统的内核协议栈理解的比较模糊,借着这一篇博客做一下简单梳理, 我觉得最直白的理解就是,内核协议栈就是操作系统中的一个网络控制软件,就是一段程序代码,它负责和网卡驱动程序交互&#xff…

Docker 从入门到实践:Docker介绍

前言 在当今的软件开发和部署领域,Docker已经成为了一个不可或缺的工具。Docker以其轻量级、可移植性和标准化等特点,使得应用程序的部署和管理变得前所未有的简单。无论您是一名开发者、系统管理员,还是IT架构师,理解并掌握Dock…

7.11全排列(LC46-M)

算法: 排列和组合很像,但是有顺序。 还是用回溯算法。 与组合不同之处(无startindex,有used数组): 首先排列是有序的,也就是说 [1,2] 和 [2,1] 是两个集合。 可以看出元素1在[1,2]中已经使…

大学物理II-作业1【题解】

1.【单选题】——考查高斯定理 下面关于高斯定理描述正确的是(D )。 A.高斯面上的电场强度是由高斯面内的电荷激发的 B.高斯面上的各点电场强度为零时,高斯面内一定没有电荷 C.通过高斯面的电通量为零时,高斯面上各点电场强度…

基于被囊群算法优化的Elman神经网络数据预测 - 附代码

基于被囊群算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于被囊群算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于被囊群优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#x…

2023-12-15 LeetCode每日一题(反转二叉树的奇数层)

2023-12-15每日一题 一、题目编号 2415. 反转二叉树的奇数层二、题目链接 点击跳转到题目位置 三、题目描述 给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。 例如,假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] &…

lambda表达式和包装器

正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 我们在使用库里的排序算法时如果排序的是自定义类型或者库里默认的排序不能满足我们则需求&…

系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:函数属性]

分类目录:《系统学习Python》总目录 如果我们没有在使用Python3.X并因此无法利用一条nonlocal语句,或者我们希望代码具有可移植性,能在Python3.X和Python2.X上同时工作一一我们仍然能够针对某些可改变的状态使用函数属性来避免使用全局变量和…

【力扣100】46.全排列

添加链接描述 class Solution:def permute(self, nums: List[int]) -> List[List[int]]:# 思路是使用回溯if not nums:return []def dfs(path,depth,visited,res):# 出递归的条件是当当前的深度已经和nums的长度一样了,把path加入数组,然后出递归if …

【算法】数论---快速幂

什么是快速幂&#xff1f; 快速幂:快速求a^b % p的值,时间复杂度:O(logb) 一、暴力写法--- 循环b次求出a^b mod p (时间复杂度:O(b)) int a,b,p; cin>>a>>b>>p;long long res1;while(b--)res res * a %p;cout<<res<<endl;二、快速幂&#xff…