服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - 什么是意向锁?它和意向书有什么区别?

什么是意向锁?它和意向书有什么区别?

2023-12-29 14:21Java中文社群 Mysql

意向锁并不能直接由开发者创建和使用,它是存在于 MySQL 中,由 MySQL 自行维护的一种协调事务加锁的机制。它在事务创建行锁和表锁时创建,在事务提交或回滚之后自动释放。

最近受废话文学的影响,所以有了今天的这个标题,希望大家能喜欢。大家不喜欢也没关系,反正我喜欢。

鲁迅先生曾经说过“我家门前有两棵树,一棵是枣树,另一棵还是枣树。”,由此可见,这老爷子算是把废话文学给玩明白了。

希望大家也能,听君一席话,如听一席话。

聊正题

聊完闲篇,咱们说回正题:什么是意向锁?为什么需要意向锁?

PS:这里没意向书什么事啊,标题中有,纯粹是为了好玩。它们不能说没什么关系,那是一点关系都没有啊。

定义

意向锁(Intention Locks)是 MySQL InnoDB 引擎中的一种锁机制(表级锁),用于协调事务间的加锁操作,以避免冲突和死锁的发生。

为什么要有意向锁?

例如,事务 A 加锁了 Users 表中的一行数据(行锁),而事务 B 要对整个 Users 表进行加锁(表锁),那么这个时候,如果没有意向锁,那事务 B 就会加锁成功了。而事务 B 如果加锁成功的话,那么它是可以对表中的任意数据行进行操作的,包括事务 A 加锁的那行数据,所以,这个时候就发生了锁冲突。

为了避免这个问题,所以 MySQL 引入了意向锁,在事务 A 添加行锁的时候,先添加意向锁,而事务 B 在添加表锁的时候,先判断一下意向锁,如果有意向锁了,它就不能加表锁了,这样避免了锁冲突,提升了加锁判断的效率。

想想一下,如果没有意向锁的话,那么事务 B 在加表锁的时候,只能一行行的判断有没有行锁,而这种判断的效率是非常低的,尤其数据量比较大时。

意向锁分类

意向锁分为以下两种类型:

意向共享锁(Intention Shared lock,IS):表示在某个资源上设置共享锁。也就是读锁,用于读取数据的操作,允许多个事务同时持有(共享锁),不互斥。

意向排他锁(Intention Exclusive lock,IX):表示在某个资源上设置排他锁。也就是写锁,用于修改和更新数据操作,并且同一时间只能由一个事务持有,不能和其他事务共同持有,具有互斥性和排他性。

小结

意向锁并不能直接由开发者创建和使用,它是存在于 MySQL 中,由 MySQL 自行维护的一种协调事务加锁的机制。它在事务创建行锁和表锁时创建,在事务提交或回滚之后自动释放。

原文地址:https://mp.weixin.qq.com/s/uBUhNuDwNelxjZ0ibGkVvQ

延伸 · 阅读

精彩推荐
  • MysqlMySQL日志管理详解

    MySQL日志管理详解

    这篇文章主要介绍了MySQL日志管理详解,本文讲解了日志种类、日志功能、MySQL中日志相关常用的服务器变量说明等内容,需要的朋友可以参考下 ...

    MYSQL教程网3972020-05-14
  • Mysqlmysql间隙锁加锁11个规则(案例分析)

    mysql间隙锁加锁11个规则(案例分析)

    这篇文章主要介绍了mysql间隙锁加锁11个规则 ,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    Mr.LUCKY8752023-03-30
  • Mysqlmysql5.7.17.msi安装图文教程

    mysql5.7.17.msi安装图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.17.msi安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    开源黑八2532020-08-04
  • MysqlMySQL按指定字符合并以及拆分实例教程

    MySQL按指定字符合并以及拆分实例教程

    这篇文章主要给大家介绍了关于MySQL按指定字符合并以及拆分的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    懂点IT的耿小厨6892021-01-22
  • Mysql图文详解Ubuntu下安装配置Mysql教程

    图文详解Ubuntu下安装配置Mysql教程

    这篇文章主要以图文结合的方式详细为大家介绍了Ubuntu安装配置Mysql的实现步骤,感兴趣的小伙伴们可以参考一下 ...

    武侯3742020-06-08
  • MysqlMySQL中explain语句的基本使用教程

    MySQL中explain语句的基本使用教程

    这篇文章主要给大家介绍了关于MySQL中explain语句的基本使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    pedro711432021-05-03
  • MysqlMYSQL索引无效和索引有效的详细介绍

    MYSQL索引无效和索引有效的详细介绍

    MYSQL索引无效和索引有效的详细介绍,需要的朋友可以参考一下 ...

    MYSQL教程网4282019-12-25
  • Mysqlmysql 8.0.17 安装图文教程

    mysql 8.0.17 安装图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.17 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    whi_sper-3572020-11-30