mysql中的意向锁IS,IX
知识储备:
1、官方文档上说mysql是支持非锁定读的;这个功能是这样实现的,如果事务a 要对行的数据进行更新的话,那么事务a要得到行的x锁,并把这一行
之前的样子记录在undo log里面,这样一来如果a 事务rollback 了就可以通过undo log 来恢复到之前的样子;说白了非锁定的一致性读就是读的
行的undo log 中的内容,所以这货根本就不用上锁。
2、在mysql中事务与锁的关系:
1、事务开始之后申请锁。
2、得到锁之后才进行相关的操作,事务提交或回滚之后才会去释放申请到的锁。
3、如果想要select 语句也加上s锁可以在select 后面加上lock in share mode 子句。
4、mysql支持意向锁、意向锁是在表级别上的;
5、innodb 对锁的分配方式:
1、innodb 的锁是需要用到的时候才会去分配,并是一次性要把事务要用到的锁分配完成后才去执行事务。
2、对锁的申请请求是放在一个队列当中的,请申请的先得到。
例子:一个lock in share mode 引起的死锁问题:
1、准备环境:
create database tempdb; use tempdb; create table t(x int); insert into t(x) values(1);
2、事务一执行如下语句:
mysql> start transaction; Query OK, 0 rows affected (0.00 sec)mysql> select * from t where x=1 lock in share mode; +------+ | x | +------+ | 1 | +------+ 1 row in set (0.00 sec)
3、事务二执行如下语句:
mysql> start transaction; Query OK, 0 rows affected (0.00 sec)mysql> delete from t where x=1;
4、接着事务一又执行如下语句:
mysql> delete from t where x=1;
5、最后mysql 监控到死锁
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
原因分析:
1、事务一先是得到了x=1 这一行上的s 锁;
2、事务二要去申请x=1 这一行上的x锁,由于事务一已经得到了s锁,所以它要等待事务一释放s锁。
3、事务一又想去申请x=1 这一行上的x锁,由于事务二的申请在事务一的前面发起,所以它要等待事务二完成后才能得到。
由以上分析可知,事务一,事务二产生了相互等待;进而死锁产生。
mysql中的意向锁IS,IX相关推荐
- mysql中的各种锁把我搞糊涂啦~
事务并发访问情况 读-读 情况 并发事务读取相同的数据,并不会对数据造成影响,允许并发读 写-写 情况 多事务并发写写时会发生脏写的情况,不过任何一个事务隔离级别都不允许此情况发生,通过加锁来杜绝脏写 ...
- MySQL中的共享锁与排他锁
2019独角兽企业重金招聘Python工程师标准>>> 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行 ...
- mysql排他锁和共享锁视频_分享MySQL 中的共享锁和排他锁的用法
在 MySQL 中的行级锁.表级锁和页级锁中,咱们介绍过,行级锁是 MySQL 中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁和排他锁的概 ...
- mysql5.0锁定用户_MySQL系列(五)---总结MySQL中的锁
MySQL中的锁 目录 概述 MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁 表级锁:开销小,加锁快,不会出现死锁.锁定粒度大,发生锁冲突的概率最高,并发量最低 行级锁:开销大,加锁慢, ...
- 把MySQL中的各种锁及其原理都画出来
疫情期间在家工作时,同事使用了 insert into on duplicate key update 语句进行插入去重,但是在测试过程中发生了死锁现象: ERROR 1213 (40001): De ...
- mysql中锁原理及for update悲观锁的详解
mysql 中有多种多样的锁,今天我们具体分享一下: 一.mysql中乐观锁和悲观锁原理及种类: 乐观锁并不是数据库自带的,如果需要使用乐观锁,那么需要自己去实现,一般情况下,我们会 ...
- 聊聊MySQL中的锁
原文地址:http://www.linzichen.cn/article/1571531799593484288 在程序开发中,当多个线程并发操作共享数据时,我们需要保证在任何时刻最多只能有一个线程在 ...
- mysql进阶: mysql中的锁(全局锁/表锁/行锁/间隙锁/临键锁/共享锁/排他锁)
锁在生活中处处可见,门锁,手机锁等等. 锁存在的意义是保护自己的东西不被别人偷走/修改. 在mysql中锁的意义也是一样,是为了保护自己的数据不被别人进行修改,从而导致出现脏读,幻读等问题.在学习锁的 ...
- 一文了解 MySQL 中的锁
1. 数据库并发场景 在高并发场景下,不考虑其他中间件的情况下,数据库会存在以下场景: 读读:不存在任何问题,也不需要并发控制. 读写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不 ...
最新文章
- php,http_build_query,乱码
- 网站制作时应该如何更合理定位与策划
- Opencv载入图片并显示的问题
- 【AI呀,我去】科技圈顶流——元宇宙上线,快来揭开它的神秘面纱
- kaggle 相关知识汇总(转载+自己整理)
- solidity数据位置-memory,storage和calldata
- SyntaxError: Non-ASCII character ‘\xe7’ in file car-training.py on line 7, but no encoding declared;
- 电子工程师私藏的一个网站
- 无盘服务器pnp,锐起无盘PNP有哪些配置类型
- 2021中青杯数学建模A题 (论文+代码) 超详细
- Android 更改头像(图片)并上传服务器功能Demo详解
- 纯CSS实现瀑布流布局
- 北京周末去随便走走,体察千百年古城残存的
- 如何利用PDF转换器将WPS转换成word
- 联想台式计算机光驱启动,联想电脑怎么设置光驱启动【图文】
- 谈谈BGA芯片S3C2440的焊接
- 机器学习的算法分类、优劣比较和选择
- 操作系统单内核和微内核的区别
- linux常用命令||
- 8B / 10B Encode/Decode详解
热门文章
- CNN 图像增强--DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks
- python实现mysql事务_python连接mysql并提交mysql事务示例
- 计算机上配置的网卡 实质上是,()计算机上配置的网卡,实质上是_ ___。
- SpringBoot监听redis订阅监听和发布订阅
- java 导出文件,导出多个文件方案~
- Spring Cloud Alibaba 之 服务治理:Nacos 如何实现微服务服务治理
- chromium android分析,Chromium Android工程迁移编译过程
- python数据类型变量_python的数据类型与变量
- 走在技术前沿,今年最火的top5 +Java开源项目
- python提交spark_带有python入口点的sparksubmit