MySQL学习笔记3 - 锁的分类

1、锁介绍

在这里插入图片描述

-- 范例表
create table mylock(
	id int not null primary key auto_increment,
	name varchar(20)
);
insert into mylock(id, name) values (1, 'a');
insert into mylock(id, name) values (2, 'b');
insert into mylock(id, name) values (3, 'c');
insert into mylock(id, name) values (4, 'd');

对于锁层面而言的两个概念:

  • :代表的是对表数据的操作(INSERT、DELETE、UPDATE、SELECT)。
  • :代表的是对表结构的操作(ALTER)。

2、锁分类

2.1、按锁粒度分类


  • 全局锁:锁的是整个database,由MySQL的SQL Layer层实现,一般情况下不用。
  • 表级锁:锁的是整个table,大多由MySQL的SQL Layer层实现,部分存储引擎也会实现表级锁,如InnoDB实现的意向锁就属于表级锁。
  • 行级锁:锁的是某行数据,也可能锁定行之间的间隙。由存储引擎实现,如InnoDB。
  • 页面锁:锁定粒度介于行级锁与表级锁之间,会出现死锁。各项性能介于表级锁、行级锁之间。使用页面锁的主要存储引擎是BerkeleyDB。

表级锁与行级锁之间的比较如下:

表级锁 行级锁
锁定目标 整个table table中某行数据
实现者 SQL Layer层 SQL Layer层 / 存储引擎
开销
加锁速度
是否会出现死锁 不会
锁定粒度 最小
发生锁冲突概率 最高 最低
并发度 最高
适用情景 查询为主、或只有少量按索引
条件更新数据。如Web应用。
有大量按索引条件并发更新少量
不同数据,同时又有并发查询的
应用,如一些在线事务处理(OLTP)
主要适用引擎 MyISAM,MEMORY,CSV等 InnoDB

2.2、按锁功能分类


  • 共享读锁:共享读锁不会阻塞其他用户对同一张表对读请求,但会阻塞对同一张表对写请求。换言之,当一个SESSION获取到共享读锁后,并不妨碍其他SESSION读取锁定数据,然后却会阻止其他SESSION修改锁定数据,直到锁被释放。
  • 排他写锁:排他写锁会同时阻塞其他用户对同一张表的读、写请求。换言之,当一个SESSION获取到排他写锁后,其他SESSION就不可以修改被锁定当数据,直到锁被释放。

2.3、按锁的实现方式分类


  • 悲观锁:认为事务之间数据竞争几率是极低的,直到提交事务之前,才回去锁定。
  • 乐观锁:先取锁再访问,为数据处理的安全提供了保证。

3、表级锁

表级锁由SQL Layer层实现。表级锁分为两种:表锁元数据锁。查看表级锁的争用状态:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值