数据库锁表如何解决_mysql数据库怎么解锁

数据库锁表如何解决_mysql数据库怎么解锁这个问题之前遇到过一次,但是由于不知道导致锁表的原因,也没细想,就知道表被锁了,然后让别人把表给解锁了。但是前天的一次操作,让我亲眼见证了导致锁表的过程,以及如何给lock的表解锁。1.导致锁表的原因(同志们也可以参考是不是也是同样的操作啊。。。):1.1首先是大前提我们正常的框架在service层都会有事物控制,比如我一个service层的方法要执行更新两张表,这两个表只有同…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

这个问题之前遇到过一次,但是由于不知道导致锁表的原因,也没细想,就知道表被锁了,然后让别人把表给解锁了。但是前天的一次操作,让我亲眼见证了导致锁表的过程,以及如何给lock的表解锁。

1.导致锁表的原因(同志们也可以参考是不是也是同样的操作啊。。。):

  • 1.1首先是大前提

我们正常的框架在service层都会有事物控制,比如我一个service层的方法要执行更新两张表,这两个表只有同时更新成功才算成功,如果有一个异常,事务回滚。

  • 1.2 我的操作
    这里写图片描述
    这是源代码的部分,当debug到sysEleMaterialClassService.updateChildParentId();出现异常,然后在catch里我打了个断点,看报错信息。看完之后没有走到 throw这个抛异常的方法,然后我就关闭了应用,修改代码。等重启后就发现表锁了。
    我这个操作就导致即没有抛异常让事务回滚,也没有让mybatis提交事务,但是表这是已经被锁定,等着你提交后执行,就这么一直等着,始终没有提交。 mybatis 对 jdbc 的代码做过封装,它的事务提交时手动的,所以我们每次要sqlSession.submit();而这一步应该是走完方法到controller层后才提交。我这里到service层就停了。

  • 1.3 报错信息

    再次启动程序还是能够查询,但是对update ,insert的操作已经执行报错: Lock wait timeout exceeded; try restarting transaction

2.解决锁表问题

  • 2.1 先用这条命令查询数据库阻塞的进程
SELECT * FROM information_schema.innodb_trx 

得到的数据如下:
这里写图片描述

  • 2.2

主要看箭头指向的这几个字段,如果有阻塞数据(不为0的就是阻塞的),找到后在根据下图这个字段:try_mysql_thread_id 作为这条数据的主键id执行这个sql进行删除: kill id ;(杀死对应id的进程).假设这里try_mysql_thread_id=277 的这条数据是锁了。我们执行 kill 277 删除就不在锁表了。
这里写图片描述

本片博客参考:mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172318.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • react路由懒加载_vue-router实现路由懒加载

    react路由懒加载_vue-router实现路由懒加载路由懒加载是什么意思?在开发中,我们打开开发者工具,会发现我们刚刚打开就会去加载所有页面.路由懒加载就是只加载你当前点击的那个模块按需去加载路由对应的资源,可以提高加载速度(一个页面加载过后再次访问不会重复加载)实现原理:将路由相关的组件,不再直接导入了,而是改写成异步组件的写法,只有当函数被调用的时候,才去加载对应的组件内容方法一:重写首先,新建一个asynccComponent.js,作为公共jsimport{ComponentasReactComponet}fr

    2022年10月7日
    1
  • Spring Bean生命周期总结「建议收藏」

    Spring Bean生命周期总结「建议收藏」1、简要说明1)本文基于spring5.1.7版本,采用ApplicationContext获取bean对象。2)BeanFactory和ApplicationContext对于bean后置处理器还有所不同,需要注意,ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调……

    2022年9月17日
    0
  • jQuery中AJAX写法「建议收藏」

    jQuery中AJAX写法「建议收藏」前言  在jQuery中AJAX的写法有3种,$ajax,$post,$get这三种。其中$post和$get是简易写法,高层的实现,在调用他们的时候,会运行底层封装好的$ajax。运用get方式一$.get("test.cgi",{name:"John",time:"2pm"},function(data){alert("DataLoaded:"+data…

    2022年9月30日
    1
  • java 链表长度_Java实现单向链表[通俗易懂]

    java 链表长度_Java实现单向链表[通俗易懂]一、前言最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了。数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用~本文主要讲解单链表的基础知识点,做一个简单的入门~如果有错的地方请指正二、回顾与知新说起链表,我们先提一下数组吧,跟数组比较一下就很理解链表这种存储结构了。2.1回顾数组数组我们无论是C、Java都会学过:数组是一种连续存储线性结构,元素类型相同…

    2022年6月6日
    23
  • 关于java二维数组长度(length)的知识

    关于java二维数组长度(length)的知识二话不说,呈上代码//定义一个整型数组:3行4列inta[][]=newint[3][4];//获取行数—3行intlenY=a.length;//获取列数—4列intlenX=a[0].length;其实很好理解,因为二维数组可以理解为是一维数组,只不过他的各处的元素是特殊元素—–一维数组a[0][0]a[0][1]a[0][2]…

    2022年6月13日
    82
  • 【边缘计算】边缘计算元年一文看懂云边协同!九大场景带来新一轮信息革命…

    【边缘计算】边缘计算元年一文看懂云边协同!九大场景带来新一轮信息革命…来源:产业智能官2019年边缘计算备受产业关注,一度引起了资本市场的投资热潮,很多人把2019年称作边缘计算的元年。理性来看,造成如此火爆局势难免有一些炒作因素在推…

    2022年6月22日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号