mysql锁初识
MySQL锁的粒度分为:行级锁、表级锁、页级锁。
一、行级锁(INNODB引擎)
行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。
行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。
行级锁分为共享锁 和 排他锁。
特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
- Record Lock,记录锁,也就是仅仅把一条记录锁上;
- Gap Lock,间隙锁,锁定一个范围,但是不包含记录本身;
- Next-Key Lock:Record Lock + Gap Lock 的组合,锁定一个范围,并且锁定记录本身。
二、表级锁(MYISAM引擎)
表级锁是mysql中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分mysql引擎支持。
表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。
最常使用的MyISAM与InnoDB都支持表级锁定。
特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。
三、页级锁(BDB引擎)
页级锁是 MySQL 中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。
因此,采取了折衷的页级锁,一次锁定相邻的一组记录。
特点:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
MySQL锁的级别分为:共享锁、排他锁、意向锁。
一、共享锁(行锁)
共享锁又称:读锁、S锁,主要为了解决并发读数据的场景,读时不允许进行写的操作
当有事务对数据加了读锁后,其他事务只能对锁定的数据加读锁,不能加写锁
加锁方式 : select * from 表 where 条件=值 lock in share mode;
释放方式 : commit、rollback;
二、排他锁(行锁)
排他锁又称:独占锁、写锁、X锁,主要为了在事务进行写操作时,不允许被其他的事务修改
当事务对数据加了写锁后,其他事务不能再对数据加任何类型的锁,有写锁的事务既能读,又能写数据
加锁方式 :自动 :增删改查操作语句默认加锁
手动 :select * from 表 where 条件=值 for update;释放方式 : commit、rollback;
三、意向锁(表锁)
意向锁又称:I锁,主要为了在一个事务中揭示下一行将要被请求锁的类型,调高加表锁的效率
加锁方式:意向锁是InnoDB自动加的,不可以手动加对于INSERT、UPDATE和DELETE,InnoDB 会自动给涉及的数据加排他锁;
对于一般的SELECT语句,InnoDB 不会加任何锁,事务可以通过以下语句显式加共享锁或排他锁。表级读锁:lock table 表 read;
表级写锁:lock table 表 write;
本文主要简单介绍了mysql锁的形成及使用方法
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!