mysql意向锁的概念和用途

2023-10-27

锁的粒度

A. 表锁(Table Lock)

对整个表加锁,影响标准的所有记录。通常用在DDL语句中,如DELETE TABLE,ALTER TABLE等。

B. 行锁(Row Lock)

对一行记录加锁,只影响一条记录。通常用在DML语句中,如INSERT, UPDATE, DELETE等。

很明显,表锁影响整个表的数据,因此并发性不如行锁好。

- 意向锁(Intention Lock)

因为表锁覆盖了行锁的数据,所以表锁和行锁也会产生冲突。如:

A. trx1 BEGI

B. trx1 给 T1 加X锁,修改表结构。

C. trx2 BEGIN

D. trx2 给 T1 的一行记录加S或X锁(事务被阻塞,等待加锁成功)。

trx1要操作整个表,锁住了整个表。那么trx2就不能再对T1的单条记录加X或S锁,去读取或修这条记录。

为了方便检测表级锁和行级锁之间的冲突,就引入了意向锁。

A. 意向锁分为意向读锁(IS)和意向写锁(IX)。

B. 意向锁是表级锁,但是却表示事务正在读或写某一行记录,而不是整个表。

所以意向锁之间不会产生冲突,真正的冲突在加行锁时检查。

C. 在给一行记录加锁前,首先要给该表加意向锁。也就是要同时加表意向锁和行锁。

采用了意向锁后,上面的例子就变成了:

A. trx1 BEGIN

B. trx1 给 T1 加X锁,修改表结构。

C. trx2 BEGIN

D. trx2 给 T1 加IX锁(事务被阻塞,等待加锁成功)

E. trx2 给 T1 的一行记录加S或X锁.

- 表锁的兼容性矩阵

IS IX S X

IS + + + –

IX + + - -

S + - + -

X - - - -

+ 代表兼容, -代表不兼容

A. 意向锁之间不会冲突, 因为意向锁仅仅代表要对某行记录进行操作。在加行锁时,会判断是否冲突。



https://blog.csdn.net/huyangyamin/article/details/46853321

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql意向锁的概念和用途 的相关文章

  • 更新或插入 MySQL Python

    如果记录已存在 我需要更新一行 如果不存在 我需要创建一个新记录 我理解 ON DUPLICATE KEY 将使用 MYSQLdb 完成此操作 但是我无法使其正常工作 我的代码如下 cursor database cursor cursor
  • MySQL-分割字符串

    我的问题与这篇文章类似 MySQL 中的 反向 GROUP CONCAT https stackoverflow com questions 17308669 reverse group concat in mysql 然而 而不是反转gr
  • SQL:将现有列设置为 MySQL 中的主键

    我有一个包含 3 列的数据库 id name somethingelse 该表没有设置索引 我收到 未定义索引 在 phpmyadmin 中id 是一个 7 位字母数字值 每行都是唯一的 我想将 Drugid 设置为主键 索引 我不知道有没
  • 规范“毒”方式真的值得吗? (3NF)

    我正处于数据库设计的早期阶段 所以还没有最终的结果 并且我正在为具有可选标签的线程使用 TOXI 3表设计 但我忍不住觉得加入是并不是真的必要 也许我只需要依赖我的简单标签列posts我可以在其中存储类似 varchar 的表
  • 获取jdbc中表依赖顺序

    我在 MySQL 数据库中有一组表 A B C D 依赖关系如下 B gt C gt A 和 D gt A 也就是说 A 有一个 PrimaryKey C 有一个外键指向 A 的主键 B 有一个外键指向 C 的主键 类似地 D 有一个外键指
  • 使用 Python 开发时保护 MySQL 密码?

    我正在编写一个使用本地托管的 MySQL 数据库的 Python 脚本 该程序将以源代码形式提供 这样 MySQL 密码就肉眼可见 有没有好的办法来保护这个呢 这个想法是为了防止一些顽皮的人查看源代码 直接访问 MySQL 并做一些事情 好
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • 使用mysql数据按高低价格排序

    这是我所拥有的以及我想做的 我的 MySql 数据库中有 12 个项目 4 个产品为 4 99 4 个产品为 3 99 4 个产品为 2 99 我意识到我可以像这样查询数据库 它会给我一个该价格的产品列表
  • MySQL:记录之间的平均间隔

    假设这张表 id date 1 2010 12 12 2 2010 12 13 3 2010 12 18 4 2010 12 22 5 2010 12 23 如何仅使用 MySQL 查询找到这些日期之间的平均间隔 例如 此表上的计算将是 2
  • Python Twisted 和数据库连接

    我们的工作项目包括同步应用程序 短期 和异步 Twisted 应用程序 长期 我们正在重构我们的数据库 并将构建一个 API 模块来解耦该模块中的所有 SQL 我想创建该 API 以便同步和异步应用程序都可以使用它 对于同步应用程序 我希望
  • 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

    在我看来 以下脚本应该有效 stmt db gt prepare UPDATE table SET status date modified stmt gt execute array 1 NOW 但经过时NOW 进入准备好的声明中 什么也
  • 将数据从 MS SQL 导入 MySQL

    我想从 MS SQL Server 导入数据 通过某种正则表达式运行它以过滤掉内容 然后将其导入 MySQL 然后 对于每个查询 我希望显示来自第三个数据库的相关图像 明智地导入和链接 最简单的方法是什么 谢谢 澄清 它是一个 PHP 应用
  • 展平具有未知列数的子/父数据

    我正在努力寻找存储和表示 SQL MySQL DB 和 C Windows 表单中的数据的最佳方法 我的数据映射到如下所示的类时 public class Parent public string UniqueID get set Key
  • 捕获动态表中 HTML 元素的值

    我有从数据库生成的以下动态表
  • iPhone表情插入MySQL却变成空值

    我们正在开发一个 iPhone 应用程序 它将表情符号从 iPhone 发送到服务器端 PHP 并插入到 MySQL 表中 我正在做服务器端的工作 但是insert语句执行成功后 插入的值变成空了 我可以正确插入字段 varchar 的是文
  • SQLAlchemy+pymysql 错误:sqlalchemy.util.queue.Empty

    尝试使用 Eclispse 在 Ubuntu 上运行 Python 2 SQLAlchemy 0 8 和 MySQL5 2 但我不断收到以下错误 我使用 pymysql 实际上是 pymysql3 引擎 模块监视器 from sqlalch
  • 将程序存储在 phpMyAdmin 中

    我必须将存储过程添加到 MySQL 数据库 问题是托管提供php我的管理员来管理数据库 我在网上搜索了一下 想法是运行创建程序的MySQL本机语句 但由于程序的代码通常可能有 我们必须更改 MySQL 中的分隔符 php我的管理员没有这个选
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • 如何对主索引重新编号

    我有一个简单的 MySQL 表 主索引 id 不是一一编号的 1 31 35 100 等 我希望它们的编号如 1 2 3 4 请告诉我该怎么做 我还想指出的是 我知道该操作可能产生的后果 但我只是想整理一下表格 我同意其他方法也可以 但我只
  • mysql计算唯一行值

    TABLE quotation id clientid 1 25 2 25 3 25 4 25 5 26 如何查询有多少个不同的客户端TABLE quotation 我不希望重复的条目被计算多次 我需要的答案是2 在 1 行中 因为唯一的非

随机推荐

  • GPT-4发布:人工智能新高度,以图生文技术震撼,短时间内挤爆OpenAI模型付费系统

    GPT 4 起飞 今日凌晨1点 OpenAI正式推出史上最强大的GPT 4文本生成AI系统 GPT 4 人工智能的新里程碑 你可能已经听说过GPT 3 它是一种能够生成自然语言文本的强大模型 可以用来回答问题 写文章 编程 创作等等 但是
  • Qt开发之路59---QPushButton的pressed,released,clicked,toggled响应的区别

    一 定义 PushButton提供如下信号 pressed 当鼠标在button上并点击左键的时候发射 released 当鼠标左键被释放的时候 clicked bool checked false 当鼠标首先按下pressed 然后释放
  • c语言练习64:calloc和realloc

    calloc和realloc C语 还提供了 个函数叫 calloc calloc 函数也 来动态内存分配 和realloc是有区别的 练习使用calloc和realloc realloc在c语言练习63中有所应用 realloc是为了扩大
  • 数字图像直方图处理涉及的数学知识介绍

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 在数字图像直方图处理学习时 老猿发现相关内容涉及数学定积分 概率统计等相关的知识 为此专门投入2个月时间将忘光了导数 微分 不定积分
  • ACN总结报告

    ACM总结报告 关于学到的知识 先暂且留一下 先说说这学期的情况 还记得 刚开始时选择这门选修课 除了听说它对于我们计算机专业的来说很有用之外 就是听说它很难 想要挑战一下自我而已 想想 现在不由自主的想要笑起来 说实在的 对于这门选修课
  • Flamingo插件_Contact Form 7表单数据存储插件

    Flamingo插件是一款用来帮助 Contact Form 7表单数据存储的插件 因为Contact Form 7插件本身没有数据存储功能 默认把前台访客提交的表单数据提交到设置好的接收邮箱 如果邮件服务器出现问题 配置错误就可能会永远丢
  • 第一课:一文读懂马尔科夫过程

    1 马尔科夫决策过程 MDPs 简介 马尔科夫决策过程是对强化学习 RL 问题的数学描述 几乎所有的RL问题都能通过MDPs来描述 最优控制问题可以用MDPs来描述 部分观测环境可以转化成POMDPs 赌博机问题是只有一个状态的MDPs 注
  • 查看LINUX放开端口,Linux下防火墙开启相关端口及查看已开启端口

    Linux下防火墙开启相关端口及查看已开启端口 1 默认情况下Linux的防火墙都是在关闭状态下的 root test etc service iptables status Firewall is stopped root test et
  • 新建Springboot项目默认test包下的测试类报错缺少org.junit.jupiter.api

    在springboot项目中碰到一个问题 记录一下 新建了一个普通的Maven项目A 其pom xml继承parent为
  • 电脑怎么恢复已删除的数据?

    恢复已经删除的数据取决于多种因素 包括删除的方式 存储设备的类型以及是否有备份等 以下是一些常见的方法 但不能保证所有情况下都能成功恢复数据 在尝试恢复数据之前 请确保不会进一步覆盖原始数据 以提高恢复成功的机会 回收站 如果你删除的是电脑
  • mysql数据去重并排序使用distinct 和 order by 的问题

    比如直接使用 SELECT distinct mobileFROM table aWHERE code 123ORDER BY a ime desc 在本地mysql数据库没有错 在线上的数据库就会报如下错 估计是版本的问题 Express
  • 典型的贪心算法~ (田忌赛马 )

    1 田忌赛马 典型的贪心算法 自己木有考虑到贪心的第二步导致wa了好多次 算法分析 Problem Description 给出2N组数据 分别表示田忌和齐威王的N匹马的速度 没进行一场比赛 每组数据共N场场赛 若能分出胜负 则输的一方要给
  • DVWA之SQL注入

    一 DVWA介绍 1 1 DVWA简介 DVWA是一款基于PHP和MYSQL开发的web靶场练习平台 集成了常见的web漏洞如sql注入 XSS 密码破解等常见漏洞 旨在为安全专业人员测试自己的专业技能和工具提供合法的环境 帮助web开发者
  • 七牛云上传图片,只需十分钟搞定

    1 去七牛云注册 建好自有空间 2 导入依赖
  • Sonar常见问题解决方案

    阻断 1 Close this FileInputStream in a finally clause 在finally中关闭FileInputStream 这个最为常见 主要是关闭方式不对 finally代码块中 应该要对每个stream
  • FCGI

    fcgi作为客户端需要注意的几点 http blog csdn net cleanfield article details 6699952 fcgi作为中间层 需要与后端server通信进行数据处理 这里需要注意一下几点 1 要做好超时处
  • 日历插件可选择_Obsidian——推荐插件

    Obsidian 推荐插件 工具 Obsidian 官方插件 关系图谱 页面预览 预览模式中 鼠标悬浮于一个内链时 显示小窗预览 编辑模式中 鼠标悬浮于链接上的同时按住 Ctrl Cmd 也会显示预览小窗 快速切换 Ctrl Cmd O 在
  • 开山之作,简单说说什么是"集群(Cluster)"

    一 什么是集群 集群 Cluster 是由两台或多台节点机 服务器 构成的一种松散耦合的计算节点集合 为用户提 供网络服务或应用程序 包括数据库 Web服务和文件服务等 的单一客户视图 同时提供接近容错机的故 障恢复能力 集群系统一般通过两
  • AndroidStudio项目打包成library以及jar包、aar包流程

    引言 一般项目做多了后 码农们都会整理出一系列的工具类来 为了方便在后面项目中使用 打包成library或者jar aar包供项目使用是比较好的方式 1 library方式 library方式是比较简单的方式 一般新建完一个项目的时候 点击
  • mysql意向锁的概念和用途

    锁的粒度 A 表锁 Table Lock 对整个表加锁 影响标准的所有记录 通常用在DDL语句中 如DELETE TABLE ALTER TABLE等 B 行锁 Row Lock 对一行记录加锁 只影响一条记录 通常用在DML语句中 如IN