解决mysql死锁问题 SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded;
  RSwO7QkcvV1n 2023年12月12日 15 0

钉钉机器人报警了

解决mysql死锁问题 SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded;_回滚

SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction

 在PHP调试时 提交事务触发异常后没有执行回滚导致mysql死锁,以致后续请求更新不了数据

问题原因

在mysql中事务a执行修改数据,比如: update table set a=1 where id=1;此时事务并未进行提交也没有回滚,然后事务B开始运行,修改同一条数据: update table set a=2 where id=1;

问题出现环境

1、在同一事务内先后对同一条数据进行插入和更新操作;

2、多台服务器操作同一数据库;

3、瞬时出现高并发现象;

4、语句中没有执行commit,也没有rollback就return退出了

比如参数检查不通过,直接return错误信息,导致回滚不能执行

如以下代码先执行了更新操作,后面出错又直接返回,导致没有执行rollback,对于这种操作return前一点要回滚,或者抛出异常统一扑捉后返回错误信息

$this->startTrans();
try {
   $user = new User();
   $user->where('id',$userId)->update(['realname'=>$parentName]);
   $existId = $this->where('class_id',$classId)->where('student_number',$number)->find();
   if ($existId) {
      return ['data' => '', 'code' => 300, 'msg' => '学号重复'];
   }
   $this->commit();
} catch (Throwable $e) {
   $this->rollback();
   return ['data' => '', 'code' => 20102, 'msg' => $e->getMessage()];
}

解决mysql死锁问题 SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded;_数据_02

更多:https://blog.51cto.com/u_12390904/6254246

 

作者:Tinywan


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月12日 0

暂无评论

推荐阅读
RSwO7QkcvV1n