MySQL行级排他锁的使用及死锁解除技巧

这篇笔记存粹是做学习记录之用,方便将来查阅,老鸟请跳过。关于MySQL排他锁的具体使用。

使用排他锁

假设有一张user表如下:

id name age
1 张成瑶 27
2 钟其林 24

打开navicat for mysql软件,先使用以下SQL,获取排他锁:

1
2
3
begin; #开启事务
select * from user where id = 1 for update; #获取排他锁
#commit; #这里注释掉,是为了模拟该事务正在执行没有提交事务

运行这条语句,会发现正常执行。此时,新开一个查询窗口,再使用以下SQL再尝试获取排他锁:

1
select * from user where id = 1 for update;

运行这条语句,会发现语句阻塞,一直处于查询状态。如果将之前那个查询窗口关闭,会发现这条SQL立即执行成功,因为关闭了窗口(没有提交的事务也随之关闭)。

解除死锁

万一并发环境下,由于事务出错没有提交成功,有可能造成死锁。此时,解除死锁的方法有一种是:将获取排他锁的SQL再运行一次,并确保同时执行了commit,只要执行成功,即可解除死锁。

最新文章

  1. scikit-learn使用笔记与sign prediction简单小结
  2. Tomcat在局域网中localhost可以访问,但是无法通过本地ip访问,127.0.0.1也无法访问问题的解决方法
  3. Android 启动APP时黑屏白屏的三个解决方案
  4. 自定义Spring event
  5. sql操作事务SqlTransHelper类实现
  6. Linux 的启动流程-阮一峰
  7. 《你不常用的c#之三》:Action 之怪状
  8. C# ToString格式大全
  9. Linux学习之Makefile文件的编写
  10. 用Html5结合Qt制作一款本地化EXE游戏-太空大战(Space War)
  11. C#开发157
  12. websocket 项目应用
  13. Python生产环境部署(fastcgi,uwsgi)
  14. Java实现Windows平台下Ping的最佳方法
  15. Tsung:开源多协议分布式负载&压力测试工具
  16. codeforces-2
  17. 解决Win10 PowerShell无法激活Anaconda环境的问题
  18. 【Jmeter】Address already in use : connect &&Permission denied: connect 解决方案
  19. 《JavaScript Dom 编程艺术》读书笔记-第8章
  20. 解决C#调用执行js报检索 COM 类工厂中 CLSID 为 {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} 组件失败

热门文章

  1. [转] UML中的六大关系
  2. 【sql】sql必知必会_02
  3. jquery使用ajax实现实时刷新,轮询
  4. 交叉连接(CROSS JOIN)
  5. AcWing 2. 01背包问题
  6. DVWA全级别之Insecure CAPTCHA(不安全的验证码)
  7. 计算系数(NOIP2011提高LuoguP1313)
  8. web布局相关
  9. Verilog 编写规范
  10. 动态设置微信小程序 navigationBarTitle 的值