首页 > 数据库 >MySQL中的锁知识点总结

MySQL中的锁知识点总结

时间:2023-08-09 11:24:29浏览次数:39  
标签:总结 知识点 事务 加锁 读取 记录 语句 死锁 MySQL

MVCC和加锁是解决并发事务带来的一致性问题的两种方式。

共享锁简称为S锁,独占锁简称为X锁。S锁与S锁兼容;X锁与S锁不兼容,与X锁也不兼容。

事务利用MVCC进行的读取操作成为一致性读,在读取记录前加锁的读取操作称为锁定读。

InnoDB有两种语法来进行锁定读:

select..lock in share mode语句为读取的记录加S锁;

select..for update语句为读取的记录加X锁。

INSERT语句一般情况下不需要在内存中生成锁结构,并单纯依靠隐式锁保护插入的记录。

UPDATE和DELETE语句在执行的过程中,在B+树中定位到待改动记录并给该记录加锁的过程也算是一个锁定读。

IS,IX锁是表级锁,它们的提出仅仅为了在之后加表级别的S锁和X锁时,可以快速判断表中的记录是否被上锁,以避免用遍历的方式来查看表中有没有上锁的记录。

InnoDB中的行级锁类型有下面这些类型:

1.Record Lock:被我们戏称为正经记录锁,只对记录本身加锁。

2.Gap Lock:锁住记录前的间隙,防止别的事务向该间隙插入新纪录。

3.Next-Key Lock: record lock和gap lock的结合体,既保护记录本身,也防止别的事务向该间隙插入新纪录。

4.Insert Intention Lock: 是为了解决“在当前事务插入记录时因碰到别的事务加的gap锁而进入等待状态,也生成一个锁结构”而提出的。

隐式锁:依靠记录的trx_id属性来保护不被别的事务改动该记录。

InnoDB存储引擎的锁在内存中对应着一个锁结构。有时为了节省锁结构,会把符合下面条件的锁放到同一个 锁结构中:

1.在同一事务中进行加锁操作。

2.被加锁的记录在同一页面中。

3.加锁的类型是一样的。

4.等待状态是一样的。

语句加锁的情况受到所在事务的隔离级别,语句执行时使用的索引类型,是否是精确匹配,是否是唯一性搜索,具体执行的语句类型等情况的制约。

可以通过information_schema数据库下的INNODB_TRX,INNODB_LOCKS,INNODB_WAITS表来查看事务和锁的 相关信息,

也可以通过SHOW  ENGINE  INNODB STATUS语句查看事务和锁的相关信息。

不同事务由于互相持有对方需要的锁而导致事务都无法继续执行的情况称为死锁。死锁发生时,InnoDB会选择一个较小的事务进行回滚。

可以通过查看死锁日志来分析死锁发生过程。

 

标签:总结,知识点,事务,加锁,读取,记录,语句,死锁,MySQL
From: https://www.cnblogs.com/huwy-123/p/17616341.html

相关文章

  • undefined_reference_to_XXX问题总结
    转:"undefinedreferencetoXXX"问题总结今天看到一篇关于“undefinedreferencetoXXX”的文章,觉得讲解得很不错,特转载之。原文链接:"undefinedreferencetoXXX"问题总结引言我们在Linux下用C/C++工作的时候,经常会遇到"undefinedreferencetoXXX"的问题,直白地说就是在链......
  • MySQL 管理表(增删改查)
    MySQL管理表:增加行:添加一行:insertintouservalues(42,"bbb","x",1003,1003,"teacher","/home/jingyaya3","/bin/bash");#添加所有列insertintotarena.user(name,uid,shell)values("aaa",1002,"/sbin/no......
  • 修改mysql8.0的数据存储目录
     -------先查看datadir的路径------------------------------------usemysqlshowvariableslike'%datadir%';————————————————————————--datadir=/data/mysqldata/mysql   老的--datadir=/bigdata/new_mysqldata  新的———————......
  • std::async的使用总结
    https://blog.csdn.net/weixin_41191739/article/details/113115847  vecotr<...>  async 其中的一种用法:#include<iostream>#include<vector>#include<string>#include<future>#include<algorithm>usingnamespacestd;s......
  • python--mysql--驱动简介和使用
    本篇文章介绍Python操作MySQL的几种方式,你可以在实际开发过程中根据实际情况合理选择。MySQL-python(MySQLdb)–支持python2.xMySQL-python又叫MySQLdb,是Python连接MySQL最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持Python2.x,而且安装的时候有很多前......
  • 云监控---grafana使用mysql数据源创建dashboard--全面解析
    grafana的dashboard简介经常被用作基础设施的时间序列数据和应用程序分析的可视化。Grafana主要特性:灵活丰富的图形化选项;可以混合多种风格;支持多个数据源;拥有丰富的插件扩展;支持用户权限管理。Grafana有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘dashboard和图形编辑......
  • MySQL流程控制语句
    连接数据库mysql-hlocalhost-uroot-prootMySQL函数函数:是指一段可以直接被另一段程序调用的程序或代码。在MySQL中会有很多的内置函数,我们只需要使用就行;常见的字符串函数concat函数selectconcat('hello','zhangsan');返回的是:hellozhangsanselectlower('HELLo......
  • TC脚本开发-窗口句柄的捕捉方法总结
    标题获得方法:整型窗口句柄窗口句柄=窗口.找到窗口("脚本编写算法.txt-记事本“)如果(窗口句柄==0)辅助.消息框("没有找到窗口")红色字体为窗口标题,必须输入准确的标题,不支持模糊捕捉。要找到准确的标题可以用AB抓抓捕捉.AB抓抓使用方法:先点击下图的鼠标窗口句柄。 然后点......
  • mysql中的空间地理字段
    第19章:MySQL中的空间扩展目录19.1.前言19.2.OpenGIS几何模型19.2.1.Geometry类的层次19.2.2.类Geometry19.2.3.类Point19.2.4.类Curve19.2.5.类LineString19.2.6.类Surface19.2.7.类Polygon19.2.8.类GeometryCollection19.2.9.类MultiPoint19......
  • mysql配置my.cnf包含innodb配置详解
    1.#以下选项会被MySQL客户端应用读取。2.#注意只有MySQL附带的客户端应用程序保证可以读取这段内容。3.#如果你想你自己的MySQL应用程序获取这些值。4.#需要在MySQL客户端库初始化的时候指定这些选项。5.6.#7.[client]8.#password=[your_passwo......