数据库锁概述[通俗易懂]

数据库锁概述[通俗易懂]行锁和表锁主要是针对锁粒度划分的,一般分为行锁、表锁、库锁行锁:访问数据库的时候,锁定整个行数据,防止并发错误。表锁:访问数据库的时候,锁定整个表数据,防止并发错误。二者的区别:表锁:开销小,加锁快,不会出现死锁;锁定粒度大,发生锁冲突概率高,并发度最低。行锁:开销大,加锁慢,会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。乐观锁和悲观锁乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有更新这个数据,可以使用版

大家好,又见面了,我是你们的朋友全栈君。

行锁和表锁

主要是针对锁粒度划分的,一般分为行锁、表锁、库锁

行锁:访问数据库的时候,锁定整个行数据,防止并发错误。

表锁:访问数据库的时候,锁定整个表数据,防止并发错误。

二者的区别:

表锁:开销小,加锁快,不会出现死锁;锁定粒度大,发生锁冲突概率高,并发度最低。

行锁:开销大,加锁慢,会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。

乐观锁和悲观锁

乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有更新这个数据,可以使用版本号等机制。

乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是体用乐观锁。在 Java 中 java.util.concurrent.atomic 包下面的原子变量类就是使用了乐观锁的一种实现方式 CAS 实现的。

悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 block 知道它拿到锁。

传统的关系型数据库里面就用到了很多这种锁机制,比如行锁、表锁、读锁、写锁等,都是在操作之前先上锁。在Java 中 synchronized 和 ReentrantLock 等独占锁就是悲观锁思想的实现。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150289.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Tensor 和Numpy转换

    Tensor 和Numpy转换Tensor转Numpyimporttorchastimportnumpyasnpa=t.ones(5)aOut[23]:tensor([1.,1.,1.,1.,1.])b=a.numpy()#Tensor->NumpybOut[25]:array([1.,1.,1.,1.,1.],dtype=float32)Numpy转Tensorimporttorchastimportnumpyasnp..

    2022年10月18日
  • python deepcopy_python中的深拷贝(deepcopy)和浅拷贝(copy)介绍及代码参考「建议收藏」

    python deepcopy_python中的深拷贝(deepcopy)和浅拷贝(copy)介绍及代码参考「建议收藏」在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。以下分两个思路来分别理解浅拷贝和深拷贝:(1)利用切片操作和工厂方法list方法拷贝(2)利用copy中的deepcopy方法进行拷贝1、利用切片操作和工厂方法list方法拷贝代码场景:有一个小伙jack,tom通过切片操作拷贝jack,anny通…

  • OpenCV基础——IplImage中的widthStep

    OpenCV基础——IplImage中的widthStepIplImage有两个属性容易导致错误:width和widthStep前者是表示图像的每行像素数,后者指表示存储一行像素需要的字节数。在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。如果8U单通道图像宽度为3,那么widthStep是4,加一个字节补齐。这个图像的一行需要4个字节,只使用前3个,最后一个空着。也就是一个宽3高3的图像的…

  • SQL注入之联合查询注入

    SQL注入之联合查询注入联合查询注入利用的前提前提条件:页面上有显示位什么是显示位?在一个在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数据展示在页面中,这个展示数据的位置就叫显示位联合注入的过程1、判断注入点2、判断是整型还是字符型3、判断查询列数4、判断显示位5、获取所有数据库名6、获取数据库(test)所有表名7、获取(数据库:test,表:admin)中所有字段名8、获取字段中的数据一、…

  • C++ vector初始化_vector>初始化

    C++ vector初始化_vector>初始化#include<iostream>#include<string>#include<vector>#include<deque>#include<list>#include<forward_list>#include<string>#include<array>usingnamespacestd;#defineLENGTH10typedefintTYPE;.

  • 谈谈数据库编程语言和其他编程语言的区别_数据库编程

    谈谈数据库编程语言和其他编程语言的区别_数据库编程要说清这个目标,先要理解数据库是做什么的。数据库这个软件,名字中有个“库”字,会让人觉得它主要是为了存储的。其实不然,数据库实现的重要功能有两条:计算、事务!也就是我们常说的OLAP和OLTP,数据库的存储都是为这两件事服务的,单纯的存储并不是数据库的目标。我们知道,SQL是目前数据库的主流语言。那么,用SQL做这两件事是不是很方便呢?事务类功能主要解决数据在写入和读出时要保持的一致性,实现这件事的难度并不小,但对于应用程序的接口却非常简单,用于操纵数据库读写的代码也很简单。如果假定目前关系数据库的逻辑存储

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号