• MySQL--行级锁与表级锁


    原文网址:MySQL--行级锁与表级锁_IT利刃出鞘的博客-CSDN博客

    简介

    说明

    本文介绍MySQL行级锁与表级锁。

    锁的类型

    锁类型

    死锁

    锁定粒度(并发性)

    适用场景

    表级锁

    不会死锁

    最大,发生锁冲突的概率最大(并发性低)

    场景1:读多写少;

    场景2:写特别多。若用行锁,会导致事务执行效率低,可能造成其他事务长时间锁等待和锁冲突。

    行级锁

    会死锁

    最小,发生锁冲突的概率最低(并发性最高)

    并发量大。

    页面锁

    会死锁

    居中,并发一般

    不同的存储引擎的锁机制

    存储引擎支持的锁说明
    InnoDB表级锁、行级锁(默认)。InnoDB行级锁基于索引实现。若查询字段无索引或索引失效,则使用表锁。
    MyISAM表级锁
    MEMORY表级锁
    BDB表级锁、页面锁

    行锁

    概述

    说明

    行锁只在InnoDB中。有两种锁:共享锁(Share Lock)(也称为:读锁)、独占锁(Exclusive Lock)。共享锁也称为:读锁;独占锁也称为:写锁。

    InnoDB实现了以下两种类型的行锁。意向锁是InnoDB自动加的,不需用户干预。

    • 共享锁(S):允许获得共享锁的事务去读一行,阻止其他事务获得相同数据集的排他锁。
    • 排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享锁和排他锁。另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁。
    • 意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。(Intention Share)
    • 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。(Intention Exclusive)

    上述锁模式的兼容情况具体如下表所示。如果一个事务请求的锁模式与当前的锁兼容,InnoDB就将请求的锁授予该事务;反之,如果两者不兼容,该事务就要等待锁释放。

    上边只是部分内容,为便于维护,本文已迁移到此地址:MySQL-行级锁与表级锁 - 自学精灵

  • 相关阅读:
    判断一个数是否偶数(深度思考)
    MySQL驱动包下载
    【python基础】编写/运行hello world项目
    Excel数据丢失怎么找回?详细恢复教程分享!
    思科Cisco分公司内网互通
    Python+AI给老照片上色
    浅谈 深度学习、机器学习、人工智能
    RK3568 android 11 增加自定义API
    Leetcode(406)——根据身高重建队列
    C语言 每日一题 PTA 11.7 day13
  • 原文地址:https://blog.csdn.net/feiying0canglang/article/details/127114446