当前位置: 首页 > news >正文

mysql默认隔离级别为什么要设置为RC?

结论:为了防止死锁。

隔离级别

mysql有四种隔离级别,默认不是RR就是RC。

数据库的锁,在不同的事务隔离级别下,是采用了不同的机制的。在 MySQL 中,有三种类型的锁,分别是Record Lock、Gap Lock和 Next-Key Lock。

  • Record Lock表示记录锁,锁的是索引记录。

  • Gap Lock是间隙锁,锁的是索引记录之间的间隙。

  • Next-Key Lock是Record Lock和Gap Lock的组合,同时锁索引记录和间隙。他的范围是左开右闭的。

问题

性能考虑

在 RC 中,只会对索引增加Record Lock,不会添加Gap Lock和Next-Key Lock。
在 RR 中,为了解决幻读的问题,在支持Record Lock的同时,还支持Gap Lock和Next-Key Lock;
为了性能和并发的考虑,修改为RC。

RR隔离级别会导致InsertOrUpdate死锁

1、innodb引擎下update在默认情况下是行锁,但是在Mysql默认隔离级别(可重复读)下,一旦update更新的数据行不存在,则会产生间隙锁(Gap lock);

2、事务1 update不存在的数据行,产生了Gap lock,事务2 update不存在的数据行,也产生了Gap lock;

3、事务1 insert操作需要等待对方释放X锁,事务2 insert操作也需要等待对方释放X锁,死锁产生,Mysql自动回滚了事务2;

Mysql update后insert造成死锁原因分析及解决

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端实用工具(二):编程规范化解决方案
  • 【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣508, 1026, 951
  • 毕业设计选题:基于ssm+vue+uniapp的智能停车场管理系统小程序
  • 字符函数和字符串函数(上)
  • Ubuntu 20.04 内核升级后网络丢失问题的解决过程
  • 经典sql题(九)SQL 查询详细指南总结二
  • 面试金典题9
  • Linux基础---13三剑客及正则表达式
  • 【Web】PolarCTF2024秋季个人挑战赛wp
  • 并查集LRU cache
  • 上海市高等学校信息技术水平考试 C程序设计(2021A场)全解
  • 希尔排序(C语言实现)
  • CMake中的PUBLIC、PRIVATE 和 INTERFACE用法
  • 2024/9/21黑马头条跟学笔记(十)
  • Ubuntu 安装和使用 Fcitx 中文输入法;截图软件flameshot
  • chrome扩展demo1-小时钟
  • input的行数自动增减
  • Median of Two Sorted Arrays
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • React中的“虫洞”——Context
  • spring + angular 实现导出excel
  • swift基础之_对象 实例方法 对象方法。
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 第2章 网络文档
  • 基于 Babel 的 npm 包最小化设置
  • 聊聊sentinel的DegradeSlot
  • 入门级的git使用指北
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​​​【收录 Hello 算法】9.4 小结
  • ## 1.3.Git命令
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (10)STL算法之搜索(二) 二分查找
  • (C#)获取字符编码的类
  • (Java入门)学生管理系统
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)PyTorch代码规范最佳实践和样式指南
  • *Django中的Ajax 纯js的书写样式1
  • .NET 反射 Reflect
  • .Net8 Blazor 尝鲜
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .net下简单快捷的数值高低位切换
  • .NET值类型变量“活”在哪?
  • :=
  • @staticmethod和@classmethod的作用与区别
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ JavaScript ] JSON方法
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [CISCN 2019华东南]Web11
  • [C语言]一维数组二维数组的大小
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)