【Mysql 学习笔记】 高级优化 --- Mysql 锁机制


一、概述

(1) 定义

在这里插入图片描述


(2) 实例介绍:生活购物

在这里插入图片描述


(3) 锁的分类

① 从数据操作的类型(读、写)分
读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响
写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。

② 从对数据操作的颗粒度 分
  • 表锁
  • 行锁

二、三锁 (表,行,页锁)

(1) 表锁(偏读)★

① 特点
偏向MyISAM存储引擎,开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发最低

② 案例分析
1. 增加/释放表锁:

增加 表锁语句

lock table 表名1 read(write), 表名2 read(write) .....;

释放 表锁语句

unlock tables;

2. 加读锁:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


3. 加写锁:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


③ 案例结论

在这里插入图片描述
在这里插入图片描述


④ 表锁分析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


(2) 行锁(偏写)★

① 特点
偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
InnoDB与MyISAM的最大不同有两点:
一是支持事务(TRANSACTION;
二是采用了行级锁

② 行锁支持事务 (复习老知识)
1. 事务(Transation)及其ACID属性

在这里插入图片描述


2. 并发事务处理带来的问题
  • 更新丢失(Lost Update)
    在这里插入图片描述

  • 脏读(Dirty Reads)
    在这里插入图片描述

  • 不可重复读(Non-Repeatable Reads)
    在这里插入图片描述

  • 幻读(Phantom Reads)
    在这里插入图片描述


3. 事务隔离级别

在这里插入图片描述

查看事务的隔离级别:show variables like "%tx_isolation%";

在这里插入图片描述


③ 案例分析
1. 行锁定基本演示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


2. 无索引行锁升级为表锁
varchar  不用 ' '  导致系统自动转换类型, 行锁变表锁

在这里插入图片描述


3. 间隙锁危害

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


4. 面试题:常考如何锁定一行

在这里插入图片描述

在这里插入图片描述


④ 案例结论

在这里插入图片描述


⑤ 行锁分析
检查innodb的行锁状态:show status like "%innodb_row_lock%";

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


⑥ 优化建议
  • 尽可能让所有数据检索都通过索引来完成避免无索引行锁升级为表锁
  • 合理设计索引,尽量缩小锁的范围
  • 尽可能减少检索条件避免间隙锁
  • 尽量控制事务大小减少锁定资源量时间长度
  • 尽可能低级别事务隔离

(3) 页锁 (了解)

开销和加锁时间界于表锁和行锁之间:会出现死锁;

锁定粒度界于表锁和行锁之间,并发度一般。

(4) 三锁如何选择?

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值