MySQL锁混乱

     2023-03-22     297

关键词:

【中文标题】MySQL锁混乱【英文标题】:MySQL lock confusion 【发布时间】:2018-05-23 09:22:56 【问题描述】:

Mysql 5.6 Innodb 可重复读取隔离级别。

T1                                        T2
select ... where id = 1 for update
                                          select ... where id = 1 for update

T1 先运行,再执行T2,它们在不同的事务中。 结果是T2select for update 被阻止。 根据https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html, select for update 将在表上设置IX 锁,并且IXIX 兼容基于本文档中的锁兼容性矩阵。 那为什么第二个select for update 被第一个屏蔽了? 我搜索了一些关于这个问题的帖子,现在我也有以下相关问题:

    select for update 会先在表上设置IX,然后在匹配索引/行上设置X,对吧?

    XS 锁可以是表级或行级的,对吧?

    在https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html的锁类型兼容性矩阵中,XS是表级锁,不是行级锁,对吧?

    第二个select for update被阻塞,因为第一个select for update在表上设置了IX,在匹配的索引/行上设置了X,所以当第二个select for update在表上设置IX时,就可以了.但是当它设置X后者时,它被阻止了,因为它已经被第一个select for update设置了X,对吧?

【问题讨论】:

您的编辑听起来好像您已经想通了(大部分),您是对的,有两个不同的方面(表格和行),从文档中不是 100% 清楚(除非你已经知道它是如何工作的);我写了一个答案here,其中某个地方与该矩阵有类似的问题(它也可能会回答您的后续问题)。一般来说:T2 应该等待,这是正确的行为,您只需以适合的方式阅读文档。 @Solarflare 感谢您的回复。看了here的回答后我有一些问题,如果你能帮助我,不胜感激。 【参考方案1】:

“那为什么第二次选择更新被第一次阻止了?” - 因为这是拥有独占 (X) 锁的全部意义所在。

    是的。 是的。 是的。 对。

【讨论】:

非常感谢。这个答案是我想要的:先用要点说是或否,然后如果你对每个点的回答是否定的,请解释细节。 MySQL doc 让我感到困惑,因为: 1. 也许我对包含大量信息的英文文档有误解 2. 它的文档在某些时候不清楚甚至误导。因此,我不确定我的理解是否 100% 正确。因此,我想向像您这样可以确定我的问题的人才确认我的问题。

Rails MySQL 查询时间混乱

】RailsMySQL查询时间混乱【英文标题】:RailsMySQLquerytimeconfusion【发布时间】:2010-01-2911:16:59【问题描述】:我有一个计数计算查询,我在我的Rails应用程序中运行了数千次,数据库中的每个客户一次。当我在禁用查询缓存的MySQL客... 查看详情

锁机制,信号机制及事件机制(代码片段)

  在多进程运行处理数据时,会出现争夺资源到时数据混乱的现象,为了避免数据混乱,这里就引入了锁机制: 锁机制:引入Lock模块,l=Lock()在子进程中,l.acquire()表示取到钥匙,锁上门进行数据处理;l.release()表示归还钥匙打开门,让... 查看详情

mysql加锁过程详解-基本知识

 Mysql加锁过程详解(1)-基本知识Mysql加锁过程详解(2)-关于mysql幻读理解Mysql加锁过程详解(3)-关于mysql幻读理解Mysql加锁过程详解(4)-selectforupdate/lockinsharemode对事务并发性影响Mysql加锁过程详解(5)-innodb多版本并发控... 查看详情

mysql加锁过程详解-innodb下的记录锁,间隙锁,next-key锁(代码片段)

Mysql加锁过程详解(1)-基本知识Mysql加锁过程详解(2)-关于mysql幻读理解Mysql加锁过程详解(3)-关于mysql幻读理解Mysql加锁过程详解(4)-selectforupdate/lockinsharemode对事务并发性影响Mysql加锁过程详解(5)-innodb多版本并发控制原... 查看详情

问答分享第一弹mysql锁总结:mysql行锁表锁排他锁共享锁的特点

...#xff0c;我是小于哥哈。前几天能分享了第一期面试题,MySQL中有哪几种锁和这些锁各有哪些特点,这道面试题是经常会被问到的一个面试题,大家反馈的都挺不错的。今天特此来总结一下。首发于公众号【终端研发部】... 查看详情

mysql锁机制详解(代码片段)

...目中用到事务,需要保证数据的强一致性,期间也用到了mysql的锁,但当时对mysql的锁机制只是管中窥豹,所以本文打算总结一下mysql的锁机制。  本文主要论述关于mysql锁机制,mysql版本为5.7,引擎为innodb,由于实际中关于innod... 查看详情

mysql锁表和解锁操作

参考技术A1、确定mysql有锁表的情况则使用以下命令查看锁表进程2、杀掉查询结果中已经锁表的trx_mysql_thread_id扩展:1、查看锁的事务2、查看等待锁的事务3、查询是否锁表:4、查询进程 查看详情

mysql锁机制

mysql锁机制mysql锁概述一:锁的区间划分1.间隙锁(GapLocks)2.临键锁(Next-keyLocks)二:锁的粒度划分1.表级锁(Table-levellock)2.行级锁(RecordLocks)3.页级锁三:锁的级别划分1.共享锁(sharelock,s锁)2.排它锁(exclusivelock 查看详情

mysql锁机制

mysql锁机制mysql锁概述一:锁的区间划分1.间隙锁(GapLocks)2.临键锁(Next-keyLocks)二:锁的粒度划分1.表级锁(Table-levellock)2.行级锁(RecordLocks)3.页级锁三:锁的级别划分1.共享锁(sharelock,s锁)2.排它锁(exclusivelock 查看详情

mysql的锁机制(a)

MySQL的锁机制简介思维导图锁的认识1.1锁的解释1.2锁的重要性1.3锁的缺点1.4简单的例子锁的类型2.1表锁种类读锁(readlock),也叫共享锁(sharedlock)写锁(writelock),也叫排他锁(exclusivelock)存储引擎默认锁MyISAM特点结论建议2.2... 查看详情

将共享锁升级为独占锁时避免 MySQL 死锁

】将共享锁升级为独占锁时避免MySQL死锁【英文标题】:AvoidingMySQLdeadlockwhenupgradingsharedtoexclusivelock【发布时间】:2016-12-0711:05:48【问题描述】:我使用的是MySQL5.5。我注意到在并发场景中发生了一个特殊的死锁,我认为这种死锁... 查看详情

mysql各种锁机制(代码片段)

阅读目录一、mysql锁介绍锁来源锁种类思维导图一览二、MyISAM表锁sys_admin_log操作日志MyISAM表test_users用户InnoDB表1、读锁2、写锁3、总结意向锁含义(百度百科)总结三、InnoDB行锁1、共享锁(S锁)2、排它锁(X锁... 查看详情

mysql-全局锁表级锁行级锁元数据锁自增锁意向锁共享锁独占锁记录锁间隙锁临键锁死锁(代码片段)

#前言本篇只介绍MySQL锁的基本知识。我的MySQL版本是MySQL5.7.34,建议使用MySQL5.6及之后的版本。##先上一个图##为什么要使用锁?个人理解:使用锁就是实现事务的原子性与隔离性、数据的一致性。##扩展阅读DDL:数据定义语言... 查看详情

什么是mysql锁?有哪些锁类型?如何使用?

什么是MySQL锁?有哪些锁类型?如何使用?Mysql中有哪几种锁?行级锁:锁定力度小,发生锁冲突概率低,实现并发度高,开销大,加锁慢,并发度高页级锁:加锁时间比行锁长,页级锁开销介于表锁和行锁之间,会出现死锁,... 查看详情

mysql-锁(代码片段)

根据加锁的范围,MySQL里面的锁大致可以分为全局锁、表级锁和行锁三类。全局锁全局锁是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令:Flushtableswithreadlock(FTWRL)当需要让整个库处于只读状态时候&#... 查看详情

mysql-锁(代码片段)

根据加锁的范围,MySQL里面的锁大致可以分为全局锁、表级锁和行锁三类。全局锁全局锁是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令:Flushtableswithreadlock(FTWRL)当需要让整个库处于只读状态时候&#... 查看详情

mysql数据库锁(代码片段)

MySQL数据库锁锁的分类按照对数据操作的类型(读/写)进行分类对数据操作的粒度分类表锁锁表---读表查看表上加过的锁释放所有表锁注意锁表---写表总结如何分析表锁定行锁行锁演示索引失效会导致行锁变成表锁间隙锁如何锁定... 查看详情

mysql锁详解

一、共享锁(S锁)&&排它锁(X锁)S锁:一个事务获取到S锁后,其他线程也可以获取数据的S锁,但是不能获取X锁。X锁:一个事务获取到X锁后,其他事务无法获取S锁,也无法获取X锁。增删改查的加锁情况:delete:加X... 查看详情