iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL数据库中有哪些锁
  • 637
分享到

MySQL数据库中有哪些锁

2024-04-02 19:04:59 637人浏览 独家记忆
摘要

这篇文章主要介绍“Mysql数据库中有哪些锁”,在日常操作中,相信很多人在mysql数据库中有哪些锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数据库中有哪些锁”

这篇文章主要介绍“Mysql数据库中有哪些”,在日常操作中,相信很多人在mysql数据库中有哪些锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql数据库中有哪些锁”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在 MySQL 数据库中,锁有很多种类型,不过大致可以分为三类:全局锁、表级锁、行级锁。这篇文章我们就简单的聊一聊这三种锁。

全局锁

全局锁是粒度比较大的锁,基本上也使用不上,就像我们家的大门一样,控制着整个数据库实例。全局锁就是对整个数据库实例加锁,让整个数据库处于只读状态。

MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock  (FTWRL),加锁之后整个数据库实例处于只读状态,有关数据操作的命令都会被挂起阻塞,例如数据更新语句、数据定义语句、更新类事务语句等等。

所以全局锁一般只用于全库备份的时候,一般只用在不支持一致性读的存储引擎做全库备份时,比如 MyISAM  这种不支持一致性读的存储引擎做全库备份时需要使用全局锁,像 InnoDB 引擎做全库备份时不需要使用全局锁。

表级锁

表级锁是 MySQL 很基本的锁策略,并且是开销最小的策略,它锁住的不是整个数据库实例,而是一张表。

表级锁跟全局锁一样,MySQL 数据库提供了加锁的命令:lock tables … read/write。例如 lock tables t1 read,  t2 write; 命令,则其他线程写 t1、读写 t2 的语句都会被阻塞。同时,线程 A 在执行 unlock tables 之前,也只能执行读 t1、读写  t2 的操作。连写 t1 都不允许,自然也不能访问其他表。

我们可以使用 unlock tables 主动释放锁,如果没有使用的话,在客户端断开的时候自动释放。

表级锁存在一个问题,如果一个查询正在遍历一个表中的数据,而执行期间另一个线程对这个表结构做变更,删了一列,那么查询线程拿到的结果跟表结构对不上,肯定是不行的。

为了解决这个问题,MySQL 5.5版本之后引入了元数据锁(meta data lock,MDL),MDL  是数据库自动加锁,当对一个表做增删改查操作的时候,加 MDL 读锁;当要对表做结构变更操作的时候,加 MDL 写锁。

MDL 锁有以下两个特点:

  • 读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。

  • 读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。因此,如果有两个线程要同时给一个表加字段,其中一个要等另一个执行完才能开始执行。

行级锁

行级锁顾名思义就是针对数据库表中的行记录加锁,行级锁可以很大程度的支持并发处理,但是同时也带来了很大的锁开销。

行级锁比较容易理解,比如事务 A 更新了一行,而这时候事务 B 也要更新同一行,则必须等事务 A 的操作完成后才能进行更新。

行级锁是由存储引擎各自实现的,也并不是所有的存储引擎都支持行级锁,比如 MyISAM 引擎就不支持行级锁,这意味着 MyISAM  存储引擎要控制并发只能使用表级锁。

InnoDB 引擎实现了行级锁,InnoDB 存储引擎中实现了两种标准的行级锁:

  • 共享锁(S Lock):允许事务读一行

  • 排它锁(X Lock):允许事务删除和更新一行

共享锁是兼容锁,就是当一个事务已经获得了行 r 的共享锁,其他事务可以立即获得行 r 的共享锁,因为读并未改变行 r 的数据。

排他锁是非兼容锁,如果有事务想获取行 r 的排他锁,若行 r 上有共享锁或者排它锁,则它必须等其他事务释放行 r 的锁。

在 InnoDB  存储引擎中,默认情况下使用的是一致性的非锁定行读,也就是通过行多版本控制器来读取行数据,我们可以显示的为行加上共享锁和排它锁,语句如下:

  • SELECT ..... FOR UPDATE:对读取的行记录加一个排它锁,其他事务想要在这些行上加任何锁都会被阻塞

  • SELECT ....... LOCK IN SHARE  MODE:对读取的行记录加一个共享锁,其他事务可以向被锁定的记录加共享锁,但是想要加排它锁。则会被阻塞。

到此,关于“MySQL数据库中有哪些锁”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库中有哪些锁

本文链接: https://www.lsjlt.com/news/59865.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据库中有哪些锁
    这篇文章主要介绍“MySQL数据库中有哪些锁”,在日常操作中,相信很多人在MySQL数据库中有哪些锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL数据库中有哪些锁”...
    99+
    2024-04-02
  • ​MySQL数据库中的锁有哪些类型
    这篇文章给大家分享的是有关MySQL数据库中的锁有哪些类型的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。MySQL数据库中的锁有共享锁,排他锁,行锁,表级锁,行级锁以及页面锁。1...
    99+
    2024-04-02
  • 数据库中加锁规则有哪些
    这篇文章主要介绍数据库中加锁规则有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!间隙锁再加上行锁,很容易在判断是否会出现锁等待的问题上犯错。因为间隙锁在可重复读隔离级别下才有效,...
    99+
    2024-04-02
  • MySQL中有哪些锁
    本篇内容介绍了“MySQL中有哪些锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!普通锁InnoDB 实现...
    99+
    2024-04-02
  • 数据库中预防死锁的方法有哪些
    预防死锁的方法有以下几种:1. 顺序加锁:按照一个固定的顺序来获取锁,避免不同的线程持有不同的锁的顺序导致死锁的发生。2. 使用超时...
    99+
    2023-09-21
    数据库
  • MySQl数据库目录有哪些
    本篇文章为大家展示了MySQl数据库目录有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、可使用 mysqladmin 变量直接从服务器中得到数据目录路径名。...
    99+
    2024-04-02
  • MySQL数据库规范有哪些
    MySQL数据库规范有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、数据库命令规范 所有数据库对象名称必须使用小写字母并...
    99+
    2024-04-02
  • mysql数据库有哪些特点
    这篇文章主要为大家展示了“mysql数据库有哪些特点”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql数据库有哪些特点”这篇文章吧。是开源数据库,使用C和C++编写。能够在许多不同的平台上...
    99+
    2023-06-25
  • MySQL数据库有哪些规范
    今天就跟大家聊聊有关MySQL数据库有哪些规范,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。基础规范(1) 必须使用InnoDB存储引擎说明:支持事...
    99+
    2024-04-02
  • MySQL数据库铁律有哪些
    这篇文章给大家分享的是有关MySQL数据库铁律有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。好的数据库规范有助于减少软件实现的复杂度,降低沟通成本,本铁律主要涵盖了建库建表...
    99+
    2024-04-02
  • MySQL数据库有哪些特性
    本篇内容介绍了“MySQL数据库有哪些特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1.使用C和C...
    99+
    2024-04-02
  • mysql数据库有哪些文件
    本篇内容介绍了“mysql数据库有哪些文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.1. ...
    99+
    2024-04-02
  • mysql数据库引擎有哪些
    这篇文章给大家介绍mysql数据库引擎有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  查看数据库引擎命令:SHOW ENGINES  ISAM  ISAM是一个定义明确且历经时...
    99+
    2024-04-02
  • MySQL数据库分支有哪些
    MySQL数据库分支有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  MySQL是历史上最受欢迎的免费开源程序之一。它是成千上万个网站的...
    99+
    2024-04-02
  • MySQL数据库中库的操作及数据类型有哪些
    这篇文章主要介绍了MySQL数据库中库的操作及数据类型有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 数据库的操作注意:SQL 语句不区分大小写,以下将以小写的语句...
    99+
    2023-06-21
  • mysql的数据库数据类型有哪些
    MySQL数据库中常用的数据类型包括: 整数类型:INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT 浮点...
    99+
    2024-05-08
    mysql
  • MySQL数据库中varchar数据类型有哪些特点
    这篇文章主要介绍MySQL数据库中varchar数据类型有哪些特点,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用...
    99+
    2024-04-02
  • MySQL数据库中有哪些备份方案
    MySQL数据库中有哪些备份方案,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、冷备份:一般主要用于非核心业务,这类业务一般都是允许业务中断...
    99+
    2024-04-02
  • MySQL数据库表中的约束有哪些
    这篇文章主要讲解了“MySQL数据库表中的约束有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库表中的约束有哪些”吧!MySQL表中的约束(constraint)为了保证数...
    99+
    2023-07-05
  • 数据库用户被锁的原因有哪些
    数据库用户被锁的原因可能有以下几种情况:1. 密码错误次数过多:如果用户连续多次输入错误密码,系统可能会自动将该用户锁定,以防止暴力...
    99+
    2023-09-29
    数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作