首页 > 数据库 >MySQL 的事务隔离级别和锁

MySQL 的事务隔离级别和锁

时间:2023-03-14 14:57:18浏览次数:42  
标签:事务 隔离 间隙 等待 申请 MySQL 级别 资源

MySQL 的事务隔离级别(Isolation Level)

 

 数据库锁,分为悲观锁和乐观锁,“悲观锁”

  • 悲观锁一般利用 SELECT … FOR UPDATE 类似的语句
  • 乐观锁利用 CAS 机制,并不会对数据加锁,而是通过对比数据的时间戳或者版本号,实现版本判断。

脏读: 读到了未提交事务的数据。

不可重复读: 事务 A 先读取一条数据,然后执行逻辑的过程中,事务 B 更新了这条数据,事务 A 再读取时,发现数据不匹配,这个现象就是“不可重复读”。

 

幻读: 在一个事务内,同一条查询语句在不同时间段执行,得到不同的结果集。

  1. 解决幻读的办法是锁住记录之间的“间隙”,为此 MySQL InnoDB 引入了新的锁,叫间隙锁(Gap Lock),所以在面试中,你也要掌握间隙锁,以及间隙锁与行锁结合的 next-key lock 锁。

一般都用设置RC ,不用RR,间隙锁性能低,可能锁表

 

死锁只有同时满足互斥、持有并等待、不可剥夺、循环等待时才会发生

 

  • 持有并等待:我们可以一次性申请所有的资源,这样就不存在等待了。

  • 不可剥夺:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样不可剥夺这个条件就破坏掉了。

  • 循环等待:可以靠按序申请资源来预防,也就是所谓的资源有序分配原则,让资源的申请和使用有线性顺序,申请的时候可以先申请资源序号小的,再申请资源序号大的,这样的线性化操作就自然就不存在循环了。

 

标签:事务,隔离,间隙,等待,申请,MySQL,级别,资源
From: https://www.cnblogs.com/jiaozg/p/17214891.html

相关文章

  • 力扣178(MySQL)-分数排名(中等)
    题目:表: Scores编写SQL查询对分数进行排序。排名按以下规则计算:分数应按从高到低排列。如果两个分数相等,那么两个分数的排名应该相同。在排名相同的分数后,排名数应......
  • docker安装mysql8
    拉取镜像dockerpullmysql:8.0.26 创建文件夹 mkdir-p/var/mysql/{data,conf}  配置cd/var/mysql/confvimmy.cnf  输入以下内容 ......
  • mysql 遍历字段并根据不同值归类
    使用procedure,注意报表是否支持特定关键字(积木报表不支持注入关键字)dropprocedureifexistsshow_battery_info;delimiter&&CREATEPROCEDUREshow_battery_info()......
  • mysql基础知识&&常用命令
    了解什么是数据库?什么是数据管理系统?什么是SQL,他们之间的关系又是什么?数据库英文单词DataBase,简称DB,按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实......
  • mysql
    腾讯云备案控制台开发者社区学习实践活动专区工具TVP文章/答案/技术大牛搜索写文章提问登录/注册 专栏首页技术知识分享Linux/UNIX上yum......
  • 【MySQL】substring_index 函数详解
    【MySQL】substring_index函数详解命令格式stringsubstring_index(string<str>,string<separator>,int<count>)命令说明截取字符串str第count个分隔符之前的字......
  • 使用Java替换字符串占位符的几种方法 String url2 = "jdbc:mysql://{0}:{1}/{2}"
    使用Java替换字符串占位符的几种方法https://blog.csdn.net/m0_67402125/article/details/125383655importorg.apache.commons.lang.text.StrSubstitutor;importj......
  • 一天吃透MySQL锁面试八股文
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校......
  • Mysql锁与事务
    我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。这些问题的本......
  • mysql排名,分组排名,行号
    基本知识:1.sql语句中,使用@来定义一个变量。如:@rank2.sql语句中,使用:=来给变量赋值,:@rank:=123,则变量rank的值为1233.sql语句中,if(A,B,C)表示,如果A条件成立,那......