iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql数据库锁机制是什么
  • 611
分享到

mysql数据库锁机制是什么

2024-04-02 19:04:59 611人浏览 泡泡鱼
摘要

小编给大家分享一下Mysql数据库锁机制是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!并发控制数据库管理系统中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性

小编给大家分享一下Mysql数据库机制是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

并发控制

  • 数据库管理系统中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。

  • 封锁,时间戳,乐观并发控制和悲观并发控制是并发控制主要采用的技术手段

当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性。锁就是其中的一种机制(推荐教程mysql教程)

锁的分类

  • 按照操作划分,可分为DML锁,DDL锁

  • 按锁粒度划分,可分为表级锁,行级锁,页级锁(mysql)

  • 按锁级别划分,可分为共享锁,排他锁

  • 按加锁方式划分,可分为自动锁,显示锁

  • 按使用方式划分,可分为乐观锁,悲观锁

DML锁用于保护数据的完整性,其中包括行级锁(TX锁),表级锁(TM锁)。DDL锁用于保护数据库对象的结构,如表,索引等的结构定义,其中包括排他DDL锁,共享DDL锁,可中断解析锁

行级锁

  • 行级锁是Mysql中锁定力度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但是加锁的开销也最大。行级锁分为共享锁排他锁

  • 特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高

表级锁

  • 表级锁是Mysql中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分Mysql引擎支持。最常见使用的MYISAM与INNODB都支持表级锁定。表级锁定分为表分享读锁(共享锁)表独占写锁(排他锁)

  • 特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发性最低

页级锁

  • 页级锁是Mysql中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但是冲突多,行级冲突少,但是速度慢。页级锁折中,以此锁定相邻的一组纪录。BDB支持页级锁

Mysql常用存储引擎的锁机制

  • MyISAM和MEMORY采用表级锁

  • BDB采用页级锁或表级锁,默认是页级锁

  • InnoDB支持行级锁和表级锁,默认为行级锁

InnoDB的行锁和表锁

InnoDB引擎中既支持行锁也支持表锁,那么什么时候会锁住整张表,什么时候锁住一行??

  • InnoDB行锁是通过给索引上的索引项加锁实现的,这点Mysql跟oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则InnoDb将使用表锁

  • 实际应用中,要注意InnoDB行锁的这一特性,否则容易导致大量的锁冲突,从而影响并发性能

    • 在不通过索引条件查询的时候,InnoDB使用的是表锁,而不是行锁

    • 由于MySQL的行锁是针对索引加的锁,不是针对纪录加的锁,所以虽然访问不同行的纪录,但是如果使用相同索引的键,是会出现锁冲突的。

    • 当表有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行,另外不论是使用主键索引,唯一索引还是普通索引,InnoDB都会使用行锁来对数据加锁

    • 即便在条件中使用了索引字段,但是否使用索引来检索数据是由Mysql通过判断不同之行计划的代价来决定的,如果Mysql认为全表扫效率更高,比如对一些很小的表,它就不会使用索引,这种情况InnoDB将使用表锁而不是行锁。因此分析锁冲突的时候,别忘记检查SQL的执行计划

行级锁和死锁

  • MyISAM是不会产生死锁的,因为MyISAM总是一次性获得所需的全部锁,要么全部满足,要么全部等待。而在InnoDB中,锁是逐步获得的,就造成死锁的可能

  • 在MySQL中,行级锁并不是直接锁纪录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条sql语句操作了主键索引,MySQL就会锁住这条主键索引;如果一条语句操作了非主键索引,MySQL就会先锁定该非主键索引,再锁定相关的主键索引。在Update,delete操作时,MySQL不仅锁定where条件扫描过的所有索引记录,而且会锁定相邻的键值,即所谓的next-key locking

  • 死锁:当两个事务同时执行,一个锁住了主键索引,在等待其他相关索引。另一个锁定了非主键索引,在等待主键索引。这样就发生死锁。

  • 发生死锁后,InnoDB一般都可以检测到,并使一个事务释放锁回退,另一个获取锁完成事务

避免死锁
  • 如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会

  • 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率

  • 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁

共享锁和排他锁
  • 行级锁是MySQL中锁定粒度最细的一种锁,行级锁能够大大减少数据库操作的冲突。行级锁分为共享锁和排他锁

1. 共享锁
  • 共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改,直到已释放所有共享锁。

  • 如果事务T对数据A加上共享锁后,那么其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据

  • 如果事务T对数据A加上共享锁后,又对数据进行修改,那么其他事务将不能获取共享锁;同样的,若多个事务对同一数据获取共享锁,则任何事务不能对该数据进行修改

  • 用法: SSELECT ... LOCK IN SHARE MODE

    在查询语句后面增加LOCK IN SHARE MODE,Mysql会对查询结果中的每行都加共享锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请共享锁,否则会被阻塞。其他线程也可以读取使用了共享锁的表,而且这些线程读取到的是同一个版本的数据

2. 排他锁
  • 排他锁又称写锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任何类型的封锁。获取排他锁的事务既能读数据,又能修改数据

  • 用法:SELECT ... FOR UPDATE 。在查询语句后面增加FOR UPDATE,MySQL会对查询结果中的每行都加排他锁,当没有其他线程对查询结果集的任何一行使用排他锁时,可以成功申请排他锁,否则会被阻塞

3. 意向锁
  • 意向锁是表级锁,其设计目的是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB中的两个表锁:

    • 意向共享锁(IS):表示事务准备给数据行加入共享锁,也即是说一个数据行加共享锁前必须先取得该表的IS锁

    • 意向排他锁(IX):表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先去的该表的IX锁

  • 意向锁是InnoDB自动加的,不需要用户干预

总结

对于insert,update,delete,InnoDB会自动给涉及到的数据加排他锁;对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显式加上共享锁或排他锁

  • 共享锁:select ... LOCK IN SHARE MODE

  • 排他锁:SELECT ... FOR UPDATE

看完了这篇文章,相信你对mysql数据库锁机制是什么有了一定的了解,想了解更多相关知识,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: mysql数据库锁机制是什么

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

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

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

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

下载Word文档
猜你喜欢
  • mysql数据库锁机制是什么
    小编给大家分享一下mysql数据库锁机制是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!并发控制数据库管理系统中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性...
    99+
    2024-04-02
  • MySQL数据库锁定机制是什么
    本篇文章给大家分享的是有关MySQL数据库锁定机制是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. MySQL 锁定机制简介各存储引擎...
    99+
    2024-04-02
  • MySQL数据库的锁机制是什么
    本篇内容介绍了“MySQL数据库的锁机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么要加锁?...
    99+
    2024-04-02
  • 数据库的锁机制是什么
    数据库的锁机制是一种用于保护数据库的一致性和并发操作的机制。它确保数据库中的数据在被多个并发事务访问和修改时保持一致性,避免数据的混...
    99+
    2023-09-20
    数据库
  • MySQ数据库锁定机制是什么
    本篇内容主要讲解“MySQ数据库锁定机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQ数据库锁定机制是什么”吧!1. MySQL 锁定机制简介各存...
    99+
    2024-04-02
  • 【数据库】MySQL中的锁机制
    MySQL中的锁机制 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。 MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎的锁定机制都是为各...
    99+
    2023-08-18
    mysql 锁机制 共享锁 排它锁
  • 什么是MySQL锁机制
    本篇内容主要讲解“什么是MySQL锁机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是MySQL锁机制”吧!无论什么时候,只要存在多个连接在同一时刻修改数...
    99+
    2024-04-02
  • MySQL加锁机制是什么
    这篇文章主要介绍MySQL加锁机制是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言在数据库中设计锁的目的是为了处理并发问题,在并发对资源进行访问时,数据库要合理控制对资源的访问规则。而锁就是用来实现这些访问规...
    99+
    2023-06-29
  • MySQL锁机制原理是什么
    这篇文章主要介绍“MySQL锁机制原理是什么”,在日常操作中,相信很多人在MySQL锁机制原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL锁机制原理是什么”...
    99+
    2024-04-02
  • MySQL中的锁机制是什么
    这篇“MySQL中的锁机制是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL中的锁机制是什么”文章吧。一.概述锁...
    99+
    2023-07-05
  • mysql数据库中锁机制的示例分析
    这篇文章主要介绍mysql数据库中锁机制的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!悲观锁与乐观锁: 悲观锁:顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所...
    99+
    2024-04-02
  • mysql锁机制的概念是什么
    本文小编为大家详细介绍“mysql锁机制的概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“mysql锁机制的概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。My...
    99+
    2024-04-02
  • 什么是MySQL元数据锁
    这篇文章主要介绍“什么是MySQL元数据锁”,在日常操作中,相信很多人在什么是MySQL元数据锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是MySQL元数据锁”的疑惑...
    99+
    2024-04-02
  • MySQL数据库锁机制的相关原理介绍
    这篇文章主要讲解了“MySQL数据库锁机制的相关原理介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库锁机制的相关原理介绍”吧!  不同于行...
    99+
    2024-04-02
  • MySQL锁定机制的原理是什么
    这篇文章给大家介绍MySQL锁定机制的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变...
    99+
    2024-04-02
  • MySQL数据库InnoDB引擎行级锁锁定范围是什么
    这篇文章主要介绍MySQL数据库InnoDB引擎行级锁锁定范围是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!         ...
    99+
    2024-04-02
  • MySQL锁机制有什么用
    这篇文章主要介绍了MySQL锁机制有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL的锁机制比较简单,其最显著的特点是不同的存...
    99+
    2024-04-02
  • MySQL锁机制及应用场景是什么
    本文小编为大家详细介绍“MySQL锁机制及应用场景是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL锁机制及应用场景是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。锁的概述MySQL锁是操作My...
    99+
    2023-07-05
  • mysql复制数据库的方法是什么
    MySQL复制数据库的方法有多种,以下是其中一种常用的方法: 使用mysqldump命令备份源数据库: mysqldump -u...
    99+
    2024-04-09
    mysql 数据库
  • Mysql锁的内部实现机制是什么
    这篇“Mysql锁的内部实现机制是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mys...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作