mysql面试常问 1: 谈谈MySQL表级锁和行级锁

谈谈MySQL表级锁和行级锁

表级锁与索引无关

行级锁与索引的关系呢??答案是有关系的,但是要具体分析不同情况

  1. 主键索引与 行级锁的关系
  2. 非主键索引与行级锁的关系

实验如下:

CREATE TABLE `person_info_large` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
show VARIABLES like 'autocommit';
set autocommit = 0;
show VARIABLES like 'autocommit';
SELECT * FROM `person_info_large` p where p.name = 2 lock in share mode ;

在这里插入图片描述
这时候,在另一个事务中,更新表的同一行或另一方是会block住,

update   `person_info_large` p set p.title = 'update' where p.name = 3  ;

在这里插入图片描述

需要等待上一个事务·解锁之后,才能做更新操作

在这里插入图片描述

结论1:Innodb在没有用到索引的时候,用的是表级锁 IS IX


结论2:Innodb在用到索引的时候,用的是行级锁/Gap锁

Gap锁是走普通非唯一索引时候,Innodb用到

在这里插入图片描述

结论3:无论是表级锁(开销小)还是行级锁,都分为共享锁和排他锁。

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

Innodb 表级别意向锁?

在这里插入图片描述

实验3 乐观锁的实现之一

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

在这里插入图片描述

在这里插入图片描述

乐观锁实现方法之一:提交之前,检查版本,上面的会有问题哦!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值