MySQL死锁1

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

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

使用排他锁

假设有一张user表如下:

idnameage
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,只要执行成功,即可解除死锁。

原文地址:https://www.cnblogs.com/longxok/p/10939852.html