MySQL行级排他锁的使用及死锁解除技巧
使用排他锁
假设有一张user表如下:
id | name | age |
---|---|---|
1 | 张成瑶 | 27 |
2 | 钟其林 | 24 |
打开navicat for mysql软件,先使用以下SQL,获取排他锁:
1
|
begin; #开启事务
|
运行这条语句,会发现正常执行。此时,新开一个查询窗口,再使用以下SQL再尝试获取排他锁:
1
|
select * from user where id = 1 for update;
|
运行这条语句,会发现语句阻塞,一直处于查询状态。如果将之前那个查询窗口关闭,会发现这条SQL立即执行成功,因为关闭了窗口(没有提交的事务也随之关闭)。
解除死锁
万一并发环境下,由于事务出错没有提交成功,有可能造成死锁。此时,解除死锁的方法有一种是:将获取排他锁的SQL再运行一次,并确保同时执行了commit,只要执行成功,即可解除死锁。