共享锁、排他锁、互斥锁、悲观锁、乐观锁、行锁、表锁、页面锁、不可重复读、丢失修改、读脏数据

来自:CSDN,作者:T-Birds

链接:https://blog.csdn.net/weixin_36634753/article/details/90815755

共享锁(S锁): 又称为读锁,可以查看但无法修改和删除的一种数据锁。如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁。获准共享锁的事务只能读数据,不能修改数据。 共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享.

排它锁(X锁): 又称为写锁、独占锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A

互斥锁: 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为' 互斥锁' 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。

悲观锁、乐观锁:

悲观锁: 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。

悲观锁和乐观锁推荐:面试难点:你了解乐观锁和悲观锁吗?

乐观锁: 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

参考:www.cnblogs.com/qjjazry/p/6581568.html

行级锁: 行级锁是 MySQL 中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突,其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

表级锁: 表级锁是 MySQL 中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分 MySQL 引擎支持。最常使用的 MyISAM 与 InnoDB 都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。

页级锁: 页级锁是 MySQL 中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。因此,采取了折衷的页级锁,一次锁定相邻的一组记录。BDB 支持页级锁。开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

丢失修改: 指事务1和事务2同时读入相同的数据并进行修改,事务2提交的结果破坏了事务1提交的结果,导致事务1进行的修改丢失。

不可重复读: 一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变、或某些记录已经被删除了!

不可重复读推荐:面试官:MySQL的可重复读级别能解决幻读问题吗?

读脏数据: 事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为'脏'数据,即不正确的数据。

死锁: 两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程

(0)

相关推荐

  • 聊一聊mysql的锁和事务隔离级别

    锁类型 - 性能锁 从性能上来看,可以分为两种类型的锁,分别是:乐观锁和悲观锁. 乐观锁是数据版本号(version)机制实现的,一般通过为数据库表增加一个数字类型的 "version&qu ...

  • 万字总结 MySQL核心知识,赠送25连环炮

    回复"000"获取大量电子书 前言 大家好,我是老田,之前写过 JVM.并发编程连环炮.然后有很多小伙伴私下找我就我继续把MySQL的连环炮整理出来,但是由于本人比较懒,又加上最近 ...

  • mysql的锁机制详解

    这段时间一直在学习mysql数据库.项目组一直用的是oracle,所以对mysql的了解也不深.本文主要是对mysql锁的总结. Mysql的锁主要分为3大类: 表级锁:存储引擎为Myisam.锁住整 ...

  • 数据库锁表及阻塞的原因和解决办法

    问题说明 数据库锁表及阻塞的原因和解决办法 数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若 对并发操作不加控制就可能 ...

  • 美团面试:MySQL中有哪些锁?当时我就懵逼了!

    美团面试:讲清楚MySQL结构体系,立马发offer 美团面试:慢SQL有遇到过吗?是怎么解决的? 美团面试:String s = new String("111")会创建几个对象 ...

  • MySQL高级部分理论知识细讲

    文章目录 一.数据库分区.分表.分库.分片 YesOk ,大家好 ,我是小刘,许久不见,甚是想念 ,小刘今天来带大家学习 分库分表的基础知识 1.1 单机数据库的瓶颈 单个表数据量越大,读写锁,插入操 ...

  • Mysql之锁、事务绝版详解

    一 锁的分类及特性 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL自然也不能 ...

  • 锁车=佛山“特产”?自家车规范停车却无故被锁,网友们炸锅了!

    买车用车就找SUV大咖 前言:近日,一则关于佛山的事件引发了网友的热议,然而这一事件并非正面积极的事情,而是已经引起众怒的"佛山特产":锁车.事实上,大咖此前已经写过关于" ...

  • 学一款好看的锁带,可以当头带腰带或包带,连环锁带教程等你来!

    大家好,今天我们来学习一款连环锁带的钩法,花带用来做成头带或装饰腰带都很好看,线材不限,大家根据自己的作品去选择即可 首先,我们钩10针锁针(这个锁针数就是装饰带的宽度,如果想改变这个宽度也可以,只要 ...

  • Excel教程:保护工作表出Bug了!锁定一个单元格,整张表都被锁住了?

    编按: 哈喽,大家好!最近有读者留言:"Excel锁定部分单元格后所有单元格都不能编辑被锁定了,该怎么办?"下面我们就一起来看看解决方法.   前段时间,我们分享了保护工作表与破解 ...

  • 【听故事,赢绘本】《悲观和乐观》成长故事

    今日故事 今天是小豆丁陪伴宝贝的第 1003 天 故事收听约 10 分钟 今日问答 1.你觉的你是一个悲观还是乐观的人呢? 2.你愿意用今天故事的方法, 让自己变得乐观起来嘛? 添加豆丁爸爸微信 拉您 ...

  • ​悲观与乐观

    悲观者说人生是一杯苦酒, 乐观者说人生是一杯香槟: 悲观者说人生是一杯清水, 乐观者说人生是一杯甘露.

  • 经历过悲观的乐观,才是真正的乐观

    来源: www.yIqig.com 时间:2021-05-25 编辑: 人生感悟 经历过悲观的乐观,才是真正的乐观 有一天我问女儿:"你觉得笑着笑着就哭了好?还是哭着哭着就笑了好呢?&quo ...

  • 悲观与乐观

    悲观者说,希望是地平线,就算看得见,也永远走不到: 乐观者说,希望是启明星,即使摘不到,曙光就在前头. 乐观者说,风是帆的伙伴,能够把我们送到胜利的彼岸: 悲观者说,风是海的帮凶,能够把我们埋在大海的 ...

  • 悲观与乐观---周卓然

    今天的主题是,悲观与乐观,什么是悲观,什么又是乐观呢?那么看看我的总结吧. 乐观的人,比如阿凡提,他就是个乐观的人,他走在路上,不小心掉进泥坑,他不会像大多数人那样抱怨,他会小心地爬出来,然后想:幸亏 ...

  • 做个悲观的乐观主义者

    告诉你个秘密.我能「预知未来」. 不过必须在严格受限的条件下才允许发挥,这是当然,不然太危险. 不信?我示范下:   你连续每期大额买彩票(假如).我掐指一算,你十年内必定会破产.   所以,预言能力 ...