Mysql的锁机制

按对数据的操作类型可分为:
1.读锁(共享锁):简称S锁,在事务要读取一条记录时,需要先获取该记录的 S锁 。(读读共享,读写互斥)
2.写锁(独占锁):又称排他锁,简称X锁,在事务要改动一条记录时,需要先获 取该记录的 X锁 。(读写互斥,写写互斥)


按锁的粒度可分为:
1.表级别锁
    1.表级别的读锁和写锁(机制同上)
    2.意向锁
        意向共享锁( Intention Shared Lock ):简称 IS锁 ,当事务准备给某条记录加S锁的时候,需要先给表级别加一个IS锁。
        意向独占锁( Intention Exclusive Lock ):简称 IX锁 ,当事务准备给某条记录加X锁的时候,需要先给表级别加一个IX锁。
                    兼容性            X            IX            S            IS
                        X            不兼容     不兼容     不兼容   不兼容
                       IX            不兼容      兼容       不兼容     兼容
                        S            不兼容     不兼容     兼容       兼容 
                       IS           不兼容      兼容         兼容       兼容
    3.自增锁(AUTO-INC):AUTO-INC锁的作用范围只是单个插入语句,插入完成,AUTO-INC锁就释放了,并不需要等到事务提交。
2.行级别锁
    1.记录锁(行锁,Record Locks):对一条记录上锁(对一行数据上锁),其他范围不受影响。
    2.间隙锁(Gap Locks):给区间内加锁(开区间)。
    3.临键锁(Next-Key Locks):这是一种特殊的间隙锁,前面Gap Locks的范围是开区间,而这里的Next-Key Locks 是前开后闭区间,即包括右端点记录(右端点记录同时被锁定)。
    4.插入意向锁(Insert Intention Locks ):一种特殊的间隙锁,多个事务,在同一个索引,同一个范围区间插入记录时,如果插入的位置不冲突,不会阻塞彼此。
3.页级别锁


按对锁的态度可分为:
1.悲观锁:就悲观锁而言,它是很没有安全感的,时刻觉得在自己读取数据或者怎样的时候,别人会对其进行干扰;所以每次在拿数据的时候都会上锁 ,比如行锁,表锁等;读锁,写锁等,都是在做操作之前先上锁,当其他事务想要访问同一数据时,都会阻塞等待。
                    适合写操作多的场景 ,可以在数据库层面阻止其他事务对该数据的操作权限,防止 读 - 写 和 写 - 写 的冲突。
2.乐观锁:乐观锁是很积极向上的,它认为同一数据被并发操作是小概率事件,很少发生的,所以它不采用数据库自身的锁机制,而是采用一定的程序机制来判断数据前后是否发生变化。
                    适合 读操作多 的场景,它不加锁,不会引发死锁问题。


按加锁方式分为:
1.显式锁
2.隐式锁

#C/C++##MySQL#
全部评论
给楼主点赞,期待更新
点赞 回复 分享
发布于 2022-07-07 12:15

相关推荐

04-02 17:22
新疆大学 Java
1. 你在这个物流平台项目中扮演的角色是什么?主要负责后端的哪一部分?2. 能简单介绍一下你负责的核心模块(货单大厅)的业务流程吗?3. 货单大厅里高频使用的多条件组合查询,你后端的存储用的是什么?4. 这个查询对应的数据量有多大?5. 除了 MySQL,你有考虑过用别的存储引擎做这种多条件检索吗?有没有必要?如果要换,应该用什么来做?6. 简历上写了 SQL 优化,整个问题是怎么发现,然后怎么解决的?7. 什么是回表?8. 你用 EXPLAIN 发现查询慢,具体是因为没有用索引,还是索引没用对?9. 联合索引的“最左匹配原则”知道吗?具体是什么意思?10. “迷你豆包”这个项目是干什么用的?主要是出于什么考虑要做这个项目?11. 能简单介绍一下这个项目中你觉得比较感兴趣的技术点吗?12. 进程和线程的区别是什么?13. 进程的上下文切换和线程的上下文切换是怎么做的?包含了哪些步骤?14. 什么是虚拟内存?使用虚拟内存有什么好处?15. 缺页中断(Page Fault)是什么意思?16. 操作系统里面有哪些锁?(或 Java 里面有哪些锁?)17. 如果 synchronized 和 ReentrantLock(可重入锁)两个选的话,优先选哪个?为什么?18. 正常情况下(单体服务中),默认应该优先选哪个锁?19. 知道 BIO、NIO、AIO 吗?BIO 的“同步阻塞”是什么意思?20. 简单介绍一下 TCP 的三次握手和四次挥手过程。21. 为什么 TCP 建立连接需要三次握手?22. TIME_WAIT 状态出现在四次挥手的什么时候?23. TIME_WAIT 状态会持续多长时间?24. HTTP 状态码 404(找不到页面)代表什么?这是服务端的问题还是客户端的问题?25. HTTP 状态码 504 一般出现在什么情况下?26. 在浏览器里面输入一个网址,到页面最终展示出来,这中间经历了怎样的过程?27. 什么是 TCP 的粘包和拆包?28. 怎么解决粘包和拆包的问题?29. MySQL InnoDB 引擎的索引使用的是什么树结构?B+树和B树的区别是什么?30. 为什么 MySQL 采用 B+树,而不用红黑树?31. 听说过幻读吗?解释一下什么是幻读。32. 怎么解决幻读问题?33. 幻读在什么隔离级别下可以解决?34. 一般怎么解决 Redis 缓存与 MySQL 数据库的缓存一致性问题?35. JVM 的内存模型(运行时数据区)包括哪些部分?36. 字符串(String)和数字在 JVM 中分别存放在哪里?37. 垃圾回收(GC)算法有哪些?38. CMS 和 G1 垃圾回收器的区别是什么?它们分别应对什么场景?39. 为什么到了 JDK 1.8 之后开始主流推荐使用 G1?CMS 有什么缺点?40. 相比之下,CMS 和 G1 谁的 GC 停顿时间会更长?为什么?41. HashMap 和 ConcurrentHashMap 的区别是什么?42. ConcurrentHashMap 是怎么做到线程安全的?43. 简单介绍一下 Spring 的控制反转(IOC)和面向切面编程(AOP)。44. AOP 的核心底层是使用什么机制实现的?45. 我们平时写个注解就能生效,注解的基本原理是什么?它为什么能把逻辑织入到代码运行路径中?46. 你平时是怎么使用 AI 辅助开发的?你的项目代码是直接用 AI 写的吗?47. RAG(检索增强生成)的一个完整运行流程是怎样的?48. 为什么要做 RAG 这个东西?它解决了什么问题?49. Token 和上下文窗口(Context Window)的概念分别是什么意思?50. 为什么要控制 Token 的数量?51. 大模型的“幻觉”是什么意思?是怎么产生的?
面试问题记录
点赞 评论 收藏
分享
评论
3
27
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务