当前位置:   article > 正文

postgreSQL检测死锁,自动回滚。_sharelock on transaction

sharelock on transaction

一、表数据

在这里插入图片描述

二、事务中的sql执行

时间事务1事务2结果
T1begin;begin;
T2update sc_lock set state = 1 where id = ‘123’ and state = 0;Affected rows: 1
T3update sc_lock set state = 2 where id = ‘456’ and state = 0;Affected rows: 1
T3update sc_lock set state = 1 where id = ‘456’ and state = 0;这里会阻塞,等待事务2的修改提交
T4update sc_lock set state = 2 where id = ‘123’ and state = 0;ERROR: deadlock detected(检测到死锁)
T5commit;commit;

T4事务2执行sql后检测到死锁,报错信息:

DETAIL: Process 3714 waits for ShareLock on transaction 582; blocked
by process 3707. Process 3707 waits for ShareLock on transaction 583;
blocked by process 3714. HINT: See server log for query details.
CONTEXT: while updating tuple (0,26) in relation “sc_lock”

三、结果

id为456的state最终被修改为1,说明事务2执行检测到死锁,事务2被回滚了。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/511820
推荐阅读
相关标签
  

闽ICP备14008679号