mysql 开发进阶篇系列 8 锁问题 (共享锁与排它锁演示)
1 .innodb 共享锁(lock in share mode)演示
|
会话1 |
会话2 |
|
SET autocommit=0; SELECT cityname FROM city WHERE city_id=14; city_id country_id cityname CityCode 14 2 22 001 |
SET autocommit=0; SELECT cityname FROM city WHERE city_id=14; city_id country_id cityname CityCode 14 2 22 001 |
|
-- 对 city_id=14加共享锁 SELECT * FROM city WHERE city_id=14 LOCK IN SHARE MODE; city_id country_id cityname CityCode 14 2 22 001 |
|
|
-- 也对 city_id=14加共享锁 SELECT * FROM city WHERE city_id=14 LOCK IN SHARE MODE; city_id country_id cityname CityCode 14 2 22 001 |
|
|
-- 当前会话对锁定的记录进行更新操作,等待锁。 UPDATE city SET cityname='深圳' WHERE city_id =14; 等待中.... |
|
|
-- 会话2也对锁定的记录进行更新操作,则会导致死锁退出 UPDATE city SET cityname='深圳' WHERE city_id =14; 错误代码: 1213 Deadlock found when trying to get lock; try restarting transaction |
|
|
获得锁后,更新成功 查询:update city set cityname='深圳' where city_id =14 共 1 行受到影响 |
2. innodb 排它锁(for update)演示
|
会话1 |
会话2 |
|
SET autocommit=0; SELECT * FROM city WHERE city_id=14; city_id country_id cityname CityCode 14 2 22 001 |
SET autocommit=0; SELECT * FROM city WHERE city_id=14; city_id country_id cityname CityCode 14 2 22 001 |
|
-- 对 city_id=14加for update 排它锁 SELECT cityname FROM city WHERE city_id=14 FOR UPDATE ; cityname 11 |
|
|
-- 可以查询 SELECT cityname FROM city WHERE city_id=14 cityname 11 -- 但不能对 city_id=14加for update 排它锁 SELECT cityname FROM city WHERE city_id=14 FOR UPDATE ; 等待中... |
|
|
-- 更新后,释放锁 UPDATE city SET cityname='深圳' WHERE city_id =14; COMMIT; |
|
|
获取锁 for update共享锁,值还是11 cityname 11 |
mysql 开发进阶篇系列 8 锁问题 (共享锁与排它锁演示)的更多相关文章
- mysql 开发进阶篇系列 10 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
- mysql 开发进阶篇系列 7 锁问题(innodb锁争用情况及锁模式)
1 .获取innodb行锁争用情况 1.1 通过检查innodb_row_lock状态变量来分析系统上的行锁的争夺情况 SHOW STATUS LIKE 'innodb_row_lock%' 通过in ...
- mysql 开发进阶篇系列 14 锁问题(避免死锁,死锁查看分析)
一. 概述 通常来说,死锁都是应用设计问题,通过调整业务流程,数据库对象设计,事务大小,以及访问数据库的sql语句,绝大部分死锁都可以避免,下面介绍几种避免死锁的常用 方法. 1. 在应用中,如果不同 ...
- mysql 开发进阶篇系列 15 锁问题 (总结)
1. innodb 行锁是基于索引实现的,如果不通过索引访问数据,innodb会使用表锁. http://www.cnblogs.com/MrHSR/p/9376086.html 2. Innodb ...
- mysql 开发进阶篇系列 13 锁问题(关于表锁,死锁示例,锁等待设置)
一. 什么时候使用表锁 对于INNODB表,在绝大部分情况下都应该使用行锁.在个别特殊事务中,可以考虑使用表锁(建议). 1. 事务需要更新大部份或全部数据,表又比较大,默认的行锁不仅使这个事务执行效 ...
- mysql 开发进阶篇系列 11 锁问题 (恢复和复制的需要,对锁机制的影响)
1. 恢复和复制的需要,对innodb锁机制的影响 mysql 通过binlog文件对增删除改等更新数据的sql语句,实现数据库的恢复和主从复制.mysql的恢复机制(复制其实就是在slave mys ...
- mysql 开发进阶篇系列 6 锁问题(事务与隔离级别介绍)
一.概述 在数据库中,数据是属于共享资源,为了保证并发访问的一致性,有效性,产生了锁.接下来重点讨论mysql锁机制的特点,常见的锁问题,以及解决mysql锁问题的一些方法或建议. 相比其他数据库,m ...
- mysql 开发进阶篇系列 12 锁问题(隔离级别下锁的差异)
1. innodb在不同隔离级别下的一致性读及锁的差异 不同的隔离级别下,innodb处理sql 时采用的一致性读策略和需要的锁是不同的,同时,数据恢复和复制机制的特点,也对一些sql的一致性读策略和 ...
- mysql 开发进阶篇系列 9 锁问题 (Innodb 行锁实现方式)
一.概述 Innodb 行锁是通过给索引上的索引项加锁来实现的.这一点与(oracle,sql server)不同后者是通过在数据块中对相应的数据行加锁.这意味着只有通过索引条件检索数据,innodb ...
随机推荐
- Vue源码解析---数据的双向绑定
本文主要抽离Vue源码中数据双向绑定的核心代码,解析Vue是如何实现数据的双向绑定 核心思想是ES5的Object.defineProperty()和发布-订阅模式 整体结构 改造Vue实例中的dat ...
- C++实现对文件中各单词词频的统计及其代码优化
先给出github上的代码链接以及项目需求 1.项目概述 这个项目的需求可以概括为:对记事本(txt)文件进行单词的词频统计和排序,排序结果以指定格式输出到默认文件中,并要求能够快速地完成整个统计和结 ...
- 20175316 盛茂淞 Arrays和String单元测试
Arrays和String单元测试 具体描述: 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Arr ...
- 使用kbmmw 实现图形验证码
首先感谢图形验证码的提供者 晴空无彩虹 https://blog.csdn.net/u011784006/article/details/80827181 他用FMX 实现了验证码的生成,我修改成 ...
- U3D一些使用
1,UGUI Button同时监听点击事件和长按事件:https://blog.csdn.net/yye4520/article/details/80844870
- C++解题报告 : 迭代加深搜索之 ZOJ 1937 Addition Chains
此题不难,主要思路便是IDDFS(迭代加深搜索),关键在于优化. 一个IDDFS的简单介绍,没有了解的同学可以看看: https://www.cnblogs.com/MisakaMKT/article ...
- CSS基础一
css作用 css将内容和样式相分离,便于修改样式.HTML 写网页的内容,CSS写内容的样式 CSS构成 p{ /*p为标签,也可以称为选择器,选择包住的内容的格式*/ font-size:12px ...
- bootstrap table使用参考
https://www.cnblogs.com/landeanfen/p/5821192.html 转载 阅读目录 一.x-editable组件介绍 二.bootstrapTable行内编辑初始方案 ...
- windows安装zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...
- Python开发——11.异常及异常处理
一.异常 1.定义 异常及时程序运行时发生错误的信号 2.种类 异常分为语法错误和逻辑错误,语法错误在程序执行之前就应该改正. 常用异常 AttributeError 试图访问一个对象没有的树形,比如 ...