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 ;

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第1张图片
这时候,在另一个事务中,更新表的同一行或另一方是会block住,

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

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第2张图片

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

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第3张图片

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


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

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

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第4张图片

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

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第5张图片
mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第6张图片

Innodb 表级别意向锁?

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第7张图片

实验3 乐观锁的实现之一

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第8张图片
mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第9张图片

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第10张图片

mysql面试常问 1: 谈谈MySQL表级锁和行级锁_第11张图片

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

你可能感兴趣的:(MYSQL,Mysql面试题)