行级锁 表级锁 乐观锁 悲观锁的描述

2023-10-12 13:10

本文主要是介绍行级锁 表级锁 乐观锁 悲观锁的描述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、行级锁和表级锁

  • 首先从锁的颗粒级别来看可分为三种:表级,页级,行级。从引擎的角度看Innodb支持表级锁和行级锁,myisam只支持表级锁。其中行级锁又分为:共享锁和排他锁。
  1. 共享锁——称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。但是使用共享锁的方法是在select ... lock in share mode,只适用查询语句。
  2. 排他锁——排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。说明:使用排他锁的方法师在sql末尾加上for update,顺便一提在innodb引擎中,会默认在update,delete这种操作加上for update。在mysql innodb中,行级锁的实现其实是依靠其对应的索引,所以如果操作的行并有用到索引,那么用的还是表级锁。

2、  乐观锁和悲观锁

  • 首先先给大家大概介绍一个并发控制——当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。说明:没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。实现并发控制的主要手段大致可以分为乐观并发控制和悲观并发控制两种。

1、乐观锁——当要对数据库中的一条数据进行修改的时候,为了避免同时被其他人修改,最好的办法就是直接对该数据进行加锁以防止并发。这种借助数据库锁机制,在修改数据之前先锁定,再修改的方式被称之为悲观并发控制。

悲观锁主要分为共享锁或排他锁:

  1. 共享锁【Shared lock】又称为读锁,简称S锁。顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。、
  2. 排他锁【Exclusive lock】又称为写锁,简称X锁。顾名思义,排他锁就是不能与其他锁并存,如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据行读取和修改。

2、悲观锁——乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。

 

这篇关于行级锁 表级锁 乐观锁 悲观锁的描述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/196066

相关文章

zblog自定义关键词和描述,zblog做seo优化必备插件

zblog自定义关键词和描述,zblog做seo优化必备插件     首先说下用到的一款插件:CustomMeta自定义数据字段 ,我们这里用到的版本是1.1,1.1+版增加了列表页标签支持!     插件介绍:文章,分类等添加自定义数据字段。1.1+版适用于 Z-Blog 2.0 B2以上版本。     在zblog2.0beta1里面,这个插件是集成到了程序里面,beta2里面默认没有了

MySQL 如何实现乐观锁?

MySQL 如何实现乐观锁? 可以基于版本号实现乐观锁,修改数据的时候带上版本号(或者时间戳): UPDATE student SET name = '小李', version = 2 WHERE id = 100 AND version = 1 在每次数据更新的时候,都带上版本号,同时将版本 + 1,比如现在要更新 id = 1,版本号为 2 的记录,这时候就要先获取 id = 1的

【软件测试】软件测试-----什么是Bug?Bug是如何分级的?Bug的生命周期是怎样的?如何描述一个Bug?

博客目录 一.软件测试的生命周期二.BUG的定义和级别2.1 bug的概念.2.2 如何描述一个bug.2.3bug的级别2.3.1 bug分级的意义.2.3.2 bug的四种级别. 三.BUG的生命周期.四.当与开发人员发生冲突该如何处理(高频面试)五.总结 一.软件测试的生命周期 软件测试贯穿于软件的整个生命周期,针对这句话我们一起来看一下软件测试是如何贯穿软件的整个生命周

FPGA编程基础(二)--常用行为仿真描述

1、常用的行为仿真描述语句 利用循环完成遍历 for、while语句常用于完成遍历测试。当设计代码包含了多个工作模式,那么就需要对各种模式都机型遍历测试,如果手动完成每种模式的测试,则将造成非常大的工作量。利用for循环,通过循环下标来传递各种模式的配置,不仅可以有效减少工作量,还能保证验证的完备性,不会漏掉任何一种模式。 (1) for循环仿真 可综合文件: module sign

《数据结构-用C语言描述第三版》课后答案 第五章

撰写匆忙,如有错误,尽情指正 1.选择题 (1)设有一个二维数组 A [ m ][ n ],假设 A [0][0]存放地址为644, A [2][2]存放地址为676,每个元素占一个空间,则 A [3][3]的存放地址为()。  A .688  B .678 C .692  D .696 答: A[2][2]的地址等于 (2*n+2)*1 +644 = 676 则n = 15 则A[

【简历】25届武汉某二本JAVA简历:项目描述真是难为学生想这么偏

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一份 25 届武汉某二本学校的JAVA简历。校招第一要点是上来必须先确定自己的求职层次,大中小厂要求不一样。二本同学主体就是小公司。虽然有些重点二本可以冲一下中厂,但这个同学学校是比较普通的本科,另外主项目类似一个管理平台,基本上没有什么亮点,没有什么提问点,竞争力比较差,虽然重复度可能没那

Halcon!!!最新!! 从零认识标定板——制作描述文件和自己的标定板

一.标定板简介 ‌标定板是一种带有固定间距图案阵列的几何模型,主要用于机器视觉、图像测量、摄影测量、三维重建等领域。‌它的主要功能包括校正镜头畸变、确定物理尺寸和像素间的转换关系,以及确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系。通过相机拍摄标定板并计算校准算法,可以获得高精度的测量和重建结果。标定板的这个过程涉及误差测量与评估以及误差图像的矫正与补偿,通过这些步骤,可以更

面试官问:说说悲观锁、乐观锁、分布式锁?都在什么场景下使用?有什么技巧?...

点击上方“朱小厮的博客”,选择“设为星标” 后台回复"书",获取 后台回复“k8s”,可领取k8s资料 如何确保一个方法,或者一块代码在高并发情况下,同一时间只能被一个线程执行,单体应用可以使用并发处理相关的 API 进行控制,但单体应用架构演变为分布式微服务架构后,跨进程的实例部署,显然就没办法通过应用层锁的机制来控制并发了。 那么锁都有哪些类型,为什么要使用锁,锁的使用场景有哪些? 锁类别

排序方法总结——Java语言描述

排序总结——Java语言描述 各种排序方法Java源代码链接:各种排序方法Java源代码链接 一 排序概述 1.1 排序的定义 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。 1.2 排序的分类 排序分为内部排序和外部排序 内部排序:若整个排序过程不需要访问外存便能完成(如软盘、硬盘),则称此类排序问题为内部排序; 外部排序:若

100423. 求出数字答案 显示英文描述

求出数字答案 显示英文描述 通过的用户数1410 尝试过的用户数1427 用户总通过次数1429 用户总提交次数1789 题目难度Easy 给你三个 正 整数 num1 ,num2 和 num3 。 数字 num1 ,num2 和 num3 的数字答案 key 是一个四位数,定义如下: 一开始,如果有数字 少于 四位数,给它补 前导 0 。 答案 key 的第 i 个数位(1 <= i <=