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中的共享锁与排他锁
注明: 本文转载自http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大 ...
- MySQL系列(五)---总结MySQL中的锁
MySQL中的锁 目录 MySQL系列(一):基础知识大总结 MySQL系列(二):MySQL事务 MySQL系列(三):索引 MySQL系列(四):引擎 概述 MyISAM支持表锁,InnoDB支持 ...
- 【数据库】MySQL中的共享锁与排他锁
转载:http://www.hollischuang.com/archives/923 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库 ...
- 【转】MySQL中的共享锁与排他锁
在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念.使用方式及 ...
- Mysql中的锁机制
原文:http://blog.csdn.net/soonfly/article/details/70238902 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的 计算资源(如 ...
- 转 MySQL中的共享锁与排他锁
原文链接在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念.使 ...
- MySQL中的共享锁与排他锁
MySQL中的共享锁与排他锁 在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共 ...
- MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)
原文地址:http://blog.csdn.net/mysteryhaohao/article/details/51669741 锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是 ...
- 谈谈MySQL中的锁
谈谈MySQL中的锁 锁的定义 在生活中锁的例子就非常多了,所以应该很容易理解锁的含义.在计算机领域,可以这样来概述,锁是计算机协调多个进行进程并发访问某一资源的机制. 在数据库中,锁也是一个 ...
随机推荐
- jsp跳转到servlet
web.xml中url-pattern的值必须和相关联的jsp页面form中的action的值一样,才会从jsp页面跳转到servlet.
- Oracle查看表空间及修改数据文件大小
Oracle查看表空间及修改数据文件大小 第一步:查看所有表空间及表空间大小: select tablespace_name ,sum(bytes) / 1024 / 1024 as MB from ...
- android的微信签名
目标: 已经在微信官网申请了账号了,想要在上面开发应用,必须首先对应用进行审核.在审核之前,需要填写应用的相关信息,包括名称.图标.用途说明.签名等. 下面介绍如何获取程序的签名. 解决方案: 选择程 ...
- LeetCode_Combinations
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...
- 《Programming WPF》翻译 第8章 2.Timeline
原文:<Programming WPF>翻译 第8章 2.Timeline Timeline代表了时间的延伸.它通常还描述了一个或多个在这段时间所发生的事情.例如,在前面章节描述的动画类型 ...
- CTO这点事(技术,业务,管理,情商,周期,趋势)转
几乎整个互联网行业都缺 CTO,特别是一些草根背景的创业者,这个问题更加显著.从我自己的感受,身边各种朋友委托我找 CTO 的需求,嗯,算下来超过两位数了,光最近一个月就有 3 个,而且这三家都是刚拿 ...
- hdr(host), hdr_beg(host) , path_beg
ACL derivatives : hdr([<name>[,<occ>]]) : exact string match 字符串精确匹配 hdr_beg([<name&g ...
- 安全:加固你的ssh 登录
SSH 是我们控制虚拟主机的一种途径,这个途径可以让我们拥有完全的控制权,如果对于这个控制权没有进行很好的安全处理,那么将会造成很大的安全问题. 我们可以在系统的日志文件 (例如:/var/ ...
- Longest Valid Parentheses 解答
Question Given a string containing just the characters '(' and ')', find the length of the longest v ...
- 编码规范(HTML)
code { font-family: "PT Mono", Menlo, "Courier New", monospace; padding: 2px 4px ...