前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL中的表锁行锁共享锁很难吗?看了本文就清楚了哦

MySQL中的表锁行锁共享锁很难吗?看了本文就清楚了哦

作者头像
用户4919348
发布2022-01-07 10:28:34
6940
发布2022-01-07 10:28:34
举报
文章被收录于专栏:波波烤鸭波波烤鸭
在这里插入图片描述
在这里插入图片描述

  MySQL数据库中的锁还是非常重要的,本文重点给大家详细的来介绍下MySQL数据中的各种锁。

一、表锁和行锁

1.表锁

表锁的优势:开销小;加锁快;无死锁 表锁的劣势:锁粒度大,发生锁冲突的概率高,并发处理能力低 加锁的方式:自动加锁。查询操作(SELECT),会自动给涉及的所有表加读锁,更新操作(UPDATE、DELETE、INSERT),会自动给涉及的表加写锁。也可以显示加锁: 共享读锁:lock table tableName read; 独占写锁:lock table tableName write; 批量解锁:unlock tables;

2.行锁

行锁的劣势:开销大;加锁慢;会出现死锁 行锁的优势:锁的粒度小,发生锁冲突的概率低;处理并发的能力强 加锁的方式:自动加锁。对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁;对于普通SELECT语句,InnoDB不会加任何锁;当然我们也可以显示的加锁: 共享锁:select * from tableName where … + lock in share more 排他锁:select * from tableName where … + for update InnoDB和MyISAM的最大不同点有两个:

  1. InnoDB支持事务(transaction);
  2. 默认采用行级锁。加锁可以保证事务的一致性。

3.表锁和行锁对比

  • 锁定粒度:表锁 > 行锁
  • 加锁效率:表锁 > 行锁
  • 冲突概率:表锁 > 行锁
  • 并发性能:表锁 < 行锁

二、锁的细分

锁名

锁级别

英文名称

共享锁

行锁

Shared Locks

排它锁

行锁

Exclusive Locks

意向共享锁

表锁

Intention Shared Locks

意向排它锁

表锁

Intention Exclusive Locks

1.共享锁

  又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一个数据可以共享一把锁,都能访问到数据,但是只能读不能修改;

代码语言:javascript
复制
select * from table where id = 1 Lock IN SHARE MODE;

2.排他锁

  又称为写锁,简称为X锁,排它锁不能与其他锁并存,如果一个事务获取了一个数据行的排它锁,其他事务就不能再获取该锁,只有该获取了排它锁的事务是可以对数据行进行读取和修改。 加锁方式:

自动:delete / update / insert 默认加上X锁 手动:select * from table for update

3.意向锁

  意向锁是由数据引擎自己维护的,用户无法手动操作意向锁.

意向共享锁(Intention Shared Lock,简称IS锁)。表示事务准备给数据行加入共享锁,也就是一个数据行加共享锁前必须先取得该表的IS锁 意向排它锁(Intention Exclusive Lock,简称IX锁)表示事务准备给数据行加入排它锁,说明事务在一个数据行加排它锁前必须先获得该表的IX锁。

为什么需要表级别的意向锁?   假设没有意向锁,我们加表锁的时候,需要去扫描全表是否有存在锁,数据量过大的时候,会导致加锁效率很低。但是如果我们在加锁的时候,数据库给我们自动加上意向锁,标记当前表,某个地方已经有了锁,那么我们就可以以很低的消耗,来完成是否加锁这个动作.

三、扩展问题

1.和Java中的锁区别

  这两个种类的锁的作用都是一样的,都是为了解决资源并发的情况下,对资源的写问题的控制。简单来说就是解决并发。

2.MySQL中锁的本质

  在MySQL数据库中,锁的本质就是对索引打上标记,如果当前表没有索引,则直接找到sequence/rownum这样的默认表序列,完成锁表。

好了~本文就介绍到这里,希望对你有所帮助哦!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、表锁和行锁
    • 1.表锁
      • 2.行锁
        • 3.表锁和行锁对比
        • 二、锁的细分
          • 1.共享锁
            • 2.排他锁
              • 3.意向锁
              • 三、扩展问题
                • 1.和Java中的锁区别
                  • 2.MySQL中锁的本质
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档