Mysql中的共享锁和排他锁
一、前言
刚开始学习MySQL中锁的时候,网上一查出来一堆,什么表锁、行锁、读锁、写锁、悲观锁、乐观锁等等等,直接整个人就懵了。好多文章都尽量把很多锁给列举一遍,生怕写少了内容不够丰富,有的连死锁、分布式锁都给写上了。其实给这些锁归归类,就清楚很多了!本篇文章只聊共享锁和排他锁,不过我们也不妨先看下锁分类。
二、锁分类
1. 按粒度
按照锁粒度划分,可以将锁划分成行锁、页锁和表锁。
这里只解释下行锁:按照行的粒度对数据进行锁定,锁定粒度小,发生锁冲突概率低,可以实现并发都高。但是对于锁的开销比较大,加上会比较慢;在程序中控制不好,可能出现死锁的情况。
说到粒度,顺带说下InnoDB 存储引擎的逻辑结构:所有数据都被逻辑地存放在一个空间内,称为表空间,而表空间由段(sengment)、区(extent)、页(page)组成。
2. 按机制
共享锁(S):又称为读锁,多个事务可以一起读,但都不能写(这里有个细节,如果只有当前事务加了共享锁,那么该事务可以写。),共享锁之间不互斥,共享锁会阻塞排它锁。
排他锁(X):又称为写锁,允许获得排他锁的事务更新数据,但是阻止其他事务获得相同数据集的共享锁和排他锁。
3. 按场景
这个跟MySQL没有直接性的关系,只是人们使用锁碰到的问题、或者使用程序解决具体场景的一些锁概念:悲观锁、乐观锁、分布式锁、死锁。
三、使用方式
- 共享锁
-- 对表加共享锁
LOCK TABLE product_comment READ;
-- 对表释放共享锁
UNLOCK TABLE;-- 对数据集加共享锁
SELECT * FROM table_name WHERE ... lock in share mode;
- 排他锁
-- 对表加排他锁
LOCK TABLE product_comment WRITE;
-- 对表释放排他锁
UNLOCK TABLE;-- 对数据集加排他锁
SELECT * FROM table_name WHERE ... for update;
1.对于UPDATE、DELETE、INSERT语句,自动给相关数据加上排他锁。
2.如果数据集过滤条件中不走索引的话,会给全表加锁。
四、实验
1. 共享锁不能写
A事务
begin;
SELECT * FROM user WHERE id = 1 lock in share mode;
update user set name = 'jsk' where id =1;
commit;
B事务
begin;
SELECT * FROM user WHERE id = 1 lock in share mode;
commit;
如果仅执行事务A中的语句,是可以顺利完成的。这里可以证明:只有当前事务加了共享锁,那么该事务可以写。
如果仅执行事务A中的前两行,然后执行事务B中前两行,再回头继续执行事务A中的第三行。此时,会一直卡在这里!
这里可以证明:数据行上有共享锁存在,就不能加上排他锁,即不能有写操作。(上面提到过,写操作会自动加上排他锁)
Mysql中的共享锁和排他锁相关推荐
- MySQL中的共享锁与排他锁
2019独角兽企业重金招聘Python工程师标准>>> 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行 ...
- mysql排他锁和共享锁视频_分享MySQL 中的共享锁和排他锁的用法
在 MySQL 中的行级锁.表级锁和页级锁中,咱们介绍过,行级锁是 MySQL 中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁和排他锁的概 ...
- 一文搞懂 mysql 中的共享锁、排他锁、悲观锁、乐观锁及使用场景
目录 一.常见锁类型 二.Mysql引擎介绍 三.常用引擎间的区别 四.共享锁与排他锁 五.排他锁的实际应用 六.共享锁的实际应用 七.死锁的发生 八.另一种发生死锁的情景 九.死锁的解决方式 十.意 ...
- mysql 事务排他锁_[数据库事务与锁]详解六: MySQL中的共享锁与排他锁
注明: 本文转载自http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大 ...
- mysql 的独占锁和排它锁_数据库中的共享锁与排他锁
摘要: 能修改数据.为什么要加锁很多人都知道,锁是用来解决并发问题的,那么什么是并发问题呢?并发情况下,不加锁会有什么问题呢?拿生活中的洗手间举例子,每个洗手间都会有一个门,并且是可以上锁的,当我们进 ...
- mysql排他锁怎么用_MySQL 中的共享锁和排他锁的用法
在 MySQL 中的行级锁.表级锁和页级锁中,咱们介绍过,行级锁是 MySQL 中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁和排他锁的概 ...
- mysql 排它锁_Mysql共享锁、排他锁、悲观锁、乐观锁
一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--间隙锁( ...
- MySQL数据库的共享锁和排他锁
MySQL数据库的锁,按照作用范围划分为: 行级锁.页级锁和表级锁,行级锁是锁定粒度最细的一种锁,能大大减少数据库操作的冲突.行级锁又分为共享锁和排他锁两种,本文将详细介绍共享锁和排他锁的概念.使用方 ...
- Java中的共享锁和排他锁(以读写锁ReentrantReadWriteLock为例)
重要声明:本人之前对java中的读写锁也不是非常了解,用的也不是很多,尤其在读写锁的策略原理一块没有深究过,本篇文章是在学习[玩转Java并发工具,精通JUC,成为并发多面手]课程后写的,故文章类型选 ...
最新文章
- 3D点云two-stage目标检测方法优化综述
- 视频导切台控制说明:RGBLink MiniPro初步测试
- 程序员所应具备的品质
- WIN32 使用 MUTEX 实现禁止多开
- 阿里一年,聊聊我成长了什么,入职阿里的职业生涯感悟
- 不可思议的素数(上)(文末送书)
- 代码审计系列篇一之代码审计学习思路
- screen中文乱码问题的解决
- Array.prototype.slice.call()如何工作?
- 数据分析【实践】——AB测试的应用、案例及关键点
- 一个技术工作者的四大核心价值理念
- 使用jQuery快速高效制作网页交互特效 第三章 上机练习三 制作课工场论坛发帖
- 绝对值信号的编码器有哪些信号输出(三、四)
- 微信小程序:开发相关
- Eeid—ligerUI学习(1)[首页布局]
- 做个男人,做个成熟的男人,做个有城府的男人
- win7计算机剩余空间,WIN7 C盘空间越来越小解决方法
- 【读书笔记】《牧羊少年奇幻之旅》
- 人人影视 for Mac(美剧电影必备神器)
- Android6.0 ios,意超越iOS9!谷歌寄希望于Android6.0系统