首页 > 其他分享 >innordb并发基础知识

innordb并发基础知识

时间:2022-10-23 20:35:40浏览次数:51  
标签:innordb 幻读 间隙 update 基础知识 问题 并发 解决 重复

说明:以下内容仅仅针对innordb引擎,其他的不一定通用   1、并发中可能存在的问题 (1)读读 不会有问题 (2)读写 有脏读、不可重复读、幻读的问题 (3)写写 有写丢失的问题   2、事务的4个特性 ACID 原子性、一致性、隔离性、持久性   3、解决问题的方案 (1)写写问题          只是理论上存在,可以由排他锁解决,update默认有排他锁,无法设置不加锁,所以这个问题在innordb中不存在 (2)读写问题          脏读问题、不可重复读问题,由mvcc解决。          幻读问题,由串行化或者间隙锁解决。   3、事务的隔离级别(读写中的问题和解决) (1)读未未提交,存在脏读、不可重复读、幻读的全部问题 (2)读已提交,解决脏读问题,有不可重复读、幻读的问题 (3)可重复读,解决脏读和不可重复读的问题,有幻读的问题 (4)串行化,问题全部解决   5、锁 (1)、从加锁的范围上,分为行锁(记录锁)、表锁(意向锁) (2)、从加锁的排斥上,分为共享锁(S锁)和排他锁(X锁) (3)、乐观锁和悲观锁,mysql中涉及的锁都是悲观锁,不提供乐观锁。但很多人误认为mvcc是乐观锁,其实这是一种无锁实现 (4)、间隙锁(gap lock) 间隙锁 是 Innodb 在 RR(可重复读) 隔离级别 下为了解决幻读问题时引入的锁机制。间隙锁是innodb中行锁的一种。 (5)、临建锁(next-key lock) 是记录锁和间隙锁的组合,它指的是加在某条记录以及这条记录前面间隙上的锁。也可以理解为一种特殊的间隙锁。通过临建锁可以解决幻读的问题。 每个数据行上的非唯一索引列上都会存在一把临键锁,当某个事务持有该数据行的临键锁时,会锁住一段左开右闭区间的数据。需要强调的一点是,InnoDB 中行级锁是基于索引实现的,临键锁只与非唯一索引列有关,在唯一索引列(包括主键列)上不存在临键锁。   6、默认锁 (1)select 默认不加任何锁 如果显式加共享锁: select .... lock in share mode select .... for update (2)update默认加排他锁   7、默认事务隔离级别      可重复读   8、innerdb设置每个事务隔离级别锁对应的方案 (1)读未提交,系统不采取任务策略 (2)读已提交和不可重复读,系统采用mvcc (3)幻读,使用串行化或者间隙锁解决   9、幻读问题的解决 (1)设置为串行化隔离级别(系统设置层面解决),代价太大,一般不采用 (2)间隙锁解决(手动解决,编写sql语句时解决) 实例: 在查询的一个区间内用for update select * from user where user_id > 100 for update;  

标签:innordb,幻读,间隙,update,基础知识,问题,并发,解决,重复
From: https://www.cnblogs.com/tcwyh/p/16819419.html

相关文章

  • 多态的基础知识
    多态:基本介绍一个引用变量可以引用多种实际类型对象的现象称为多态。一个引用变量可以引用这个类和该类的所有子类对象。父类引用变量引用子类对象规则:沿着继承层......
  • Golang:4.1、Golang 并发编程-协程
    4.1、Golang并发编程-协程共语言中的并发是函数相互独立运行的能力。goroutines是并发运行的函数创建协程gotask()示例1packagemainimport("fmt""t......
  • 并发和并行
    并发和并行是多线程中比较重要的两个概念并发一句话总结,微观看是串行的,宏观上看感觉是并行的。在单核cpu中所有的线程之间是并发执行的,cpu执行任务时在多个线程之间连续......
  • Java并发编程学习9-并发基础Demo
    构建高效且可伸缩的结果缓存本篇我们将逐步构建一个高效且可伸缩的缓存,用于改进一个高计算开销的函数。1.HashMap+并发机制我们首先能想到的就是,通过HashMap和并发......
  • 1_基础知识
    1_go基础gotest用法可以直接指定test文件可以直接指定example文件test文件必须是xxx_test.go-xxx_test文件一般和测试程序同一个包-函数TestAdd以Test开头,......
  • java基础知识
    JAVA基础知识标识符和关键字关键字标识符无论类名、方法名、变量名都是标识符命令规则:所有标识符都应该以大小写字符、美元符号、或下划线开始首字符后可以......
  • C++并发编程实战 第二版 电子书 pdf
    作者:安东尼·威廉姆斯(AnthonyWilliams)出版社:人民邮电出版社出品方:异步图书原作名:C++ConcurrencyinAction,SecondEdition 链接:C++并发编程实战第二版 ......
  • 爬虫基础知识(web前端,请求模块urllib,重构user_agent)
    ✅个人主页:​​hacker_demo的51CTO博客......
  • 计算机基础知识
    计算机基础知识目录计算机存储单位进制转换进制之间的转换计算机的储存单位编码计算机存储单位进制转换二级制进制是计算机中广泛采用的一种数制,二进制使用0和1......
  • 多线程基础知识
    【单核处理器和多核处理器的多线程】单核处理器:为每个线程分配时间片。来模拟并发多核处理器:一核一线程,真正实现并发 【标志】线程一致性,IsAlive就为true,否则为fals......