常问 3: 谈谈MySQL共享锁与排他锁
https://blog.csdn.net/localhost01/article/details/78720727
https://blog.csdn.net/c466254931/article/details/53463596
https://www.cnblogs.com/zhanht/p/5431273.html
https://www.cnblogs.com/liaoweipeng/p/7615959.html
锁的基本概念
当多事务争取一个资源时,有可能导致数据不一致,这个时候需要一种机制限制,并且将数据访问顺序化,用来保证数据库数据的一致性,锁就是其中的一种机制。我们可以用商场的试衣间来做个比喻,商场里得每个试衣间都可供多个消费者使用,因此可能出现多个消费者同时试衣服需要使用试衣间,这时候就产生冲突了,为了避免冲突,试衣间装了锁(其实就是进去之后把门拴住),某一个试衣服的人在试衣间里把锁锁住了,其他顾客就不能再从外面打开了,只能等待里面的顾客,试完衣服,从里面把锁打开,外面的人才能进去(网上找到的比喻,非常形象)。不过我想要是并发了就尴尬了,哈哈。
行级锁 行级锁–>分为共享锁和排他锁
行级锁是Mysql中锁定粒度最细的一种锁,能大大减少数据库操作的冲突,
由于其粒度小,加锁的开销最大。
MySQL主要的两种锁的特性可大致归纳如下:
表级锁: 开销小,加锁快;不会出现死锁(因为MyISAM会一次性获得SQL所需的全部锁);
锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
MyIsam -----》只支持表级锁
Innodb -----》InnoDB存储引擎既支持行级锁( row-level locking),也支持表级锁,但默认情况下是采用行级锁。
共享锁又称为读锁,简称S锁
顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
排他锁又称为写锁,简称X锁
顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。排他锁指的是一个事务在一行数据加上排他锁后,其他事务不能再在其上加其他的锁
mysql InnoDB引擎默认的修改数据语句,
update,delete,insert都会自动给涉及到的数据加上排他锁,
select语句默认不会加任何锁类型,如果加排他锁可以使用select…for update语句,
加共享锁可以使用select … lock in share mode语句。
- 所以加过排他锁的数据行在其他事务种是不能修改数据的, 也不能通过for update和lock in share
mode锁的方式查询数据, 但可以直接通过select …from…查询数据,因为普通查询没有任何锁机制。
下面做实验验证上面的结论
show VARIABLES like 'autocommit';
设置自动提交事务为否
set autocommit = 0;
执行事务提交
COMMIT ;
结论:也就是说,Innodb存储引擎执行数据 update时候,会加上排他锁,这时候,执行 update ,delete ,insert , 或者 select select…for update 和 select … lock in share mode 都会发生阻塞,但是执行 select * from table 是不会阻塞的。
常问 3: 谈谈MySQL共享锁与排他锁相关推荐
- mysql共享锁使用方法_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景...
Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...
- mysql锁的应用场景_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...
- 浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...
- Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...
- mysql 共享锁和排他锁 意向锁 记录锁 Gap Locks Next-Key Locks 插入意向锁介绍
文章目录 前言: 共享锁和排它锁 LOCK TABLES 和 UNLOCK TABLES 语句 意向锁 记录锁Record Locks 间隙锁 Gap Locks 下一键锁定 next-key 插入意 ...
- mysql共享锁与排他锁
mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能 ...
- Mysql共享锁和排他锁
文章目录 前言 一.什么是共享锁和排他锁? 二.数据准备 三.测试验证 1.对数据行加入排他锁,测试其它锁 2.对数据行加入共享锁,测试其它锁 3.对数据行进行insert.delete.update ...
- mysql共享锁、排他锁、意向锁
1.共享锁(读锁) 加了读锁,只允许别的事务继续加读锁而不能加写锁,也就是只读. 用法是SELECT - LOCK IN SHARE MODE 2.排他锁(写锁) 加了写锁,别的事务不允许加任何锁. ...
- Mysql共享锁实例_mysql共享锁与排他锁用法实例分析
本文实例讲述了mysql共享锁与排他锁用法.分享给大家供大家参考,具体如下: mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称 ...
最新文章
- 使用SC命令时注意事项
- Mysql之case when用法总结
- qt-designer使用教程3--编写自己的槽
- 牛津花卉数据集贴标签分类
- linux php后门,Linux_一个初级的linux后门制作方法,众所周知,Linux的文件权限如: - phpStudy...
- [ZT]恐怖“标语”
- discuz viewthread.php,修改discuz论坛的标题header和footer
- 前后落差大用什么词语_形容落差很大的成语_四字词语 - 成梦词典
- 面向对象编程方法-抽象
- smartsvn 8.6.6 for linux 的安装与破解
- 中国港口年鉴(2000-2020年)
- python词云图的制作(用户评论分析)
- python测试工程师简历模板_自动化测试工程师简历专业技能怎么写
- z变换解差分方程例题_Z变换解差分方程的思考
- The destination is read-only
- java dwr 漏洞_DWR异常情况处理常见方法解析
- 数据库SQLServer的视图
- 应对长尾分布的目标检测 -- Balanced Group Softmax
- 黄光裕主宰不了国美的未来
- 开源一个小工具,是一个封装的数据查询小框架