MySQL进阶系列:锁-InnoDB中锁的情况

本文详细介绍了MySQL InnoDB存储引擎中的锁机制,重点讲解了行级锁的类型,包括记录锁、间隙锁和临键锁。此外,还探讨了锁的分类,如共享锁、排它锁、意向共享锁和意向排它锁,以及自增锁。在InnoDB中,行级锁依赖于索引实现,不通过索引访问可能导致表级锁。最后,文章提到了事务的ACID属性和并发事务可能遇到的问题,以及如何通过设计和SQL调整来减少锁冲突和死锁。
摘要由CSDN通过智能技术生成

MySQL锁-InnoDB中锁的情况

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 5.7.21    |
+-----------+
1 row in set (0.01 sec)

一,锁的基本介绍

相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

行级锁类型:

Record Lock(记录锁):当个记录的锁(锁住单条记录)

记录锁只会锁住索引的记录,如果InnoDB存储表在建立的时候没有任何索引,那么这个锁会使用隐式的主键来进行锁定,如下图

Gap Lock(间隙锁):锁定一个范围,不包括记录本身(只锁数据前面的GAP)

如下图为的锁就是GAP锁,就是不允许其他事务在索引列8之前的间隙插入新的记录,也就是(3 , 8)这个区间。gap锁 的作用仅仅是为了防止插入幻影记录的而已

Next-Key Lock(临键锁):同时锁住记录和记录前面的GAP,也就是Next-Key Lock = Record Lock + Gap Lock。

二,锁的分类

共享锁 Share Locks (简称S锁,属于行锁)

排它锁 Exclusive Locks (简称X锁,属于行锁)

意向共享锁 Intention Share Locks (简称IS锁,属于表锁)

意向排它锁 Intention Exclusive Locks (简称IX锁,属于表锁)

自增锁 AUTO-INC Locks(属于表锁)

下面具体介绍下每种类型的锁,我们先建一张innodb的表,sql如下

create table tab_with_index(id int,name varchar(10)) engine=innodb;
alter table tab_with_index add index id(id);
insert into tab_with_index values(1,&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值