数据库锁表如何解决_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 报错415怎么解决_服务器请求415

    报错415怎么解决_服务器请求415415错误

    2025年6月19日
    1
  • java linkhashset_java中集合怎么定义

    java linkhashset_java中集合怎么定义LinkedHashSet是Set集合的一个实现,具有set集合不重复的特点,同时具有可预测的迭代顺序,也就是我们插入的顺序。并且linkedHashSet是一个非线程安全的集合。如果有多个线程同时访问当前linkedhashset集合容器,并且有一个线程对当前容器中的元素做了修改,那么必须要在外部实现同步保证数据的冥等性。下面我们new一个新的LinkedHashSet容器看一下具体的源码实现。…

    2022年10月12日
    4
  • Ubuntu rootfs_怎么制作ubuntu启动U盘

    Ubuntu rootfs_怎么制作ubuntu启动U盘制作ubunturootfs下载base镜像:http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.1/release/解压:tar-zxfubuntu-xx-base-amd64.tar.gz-C./ubuntu-rootfs/apt-getinstallqemu-user-staticcp/usr/bin/qemu-amd64…

    2022年10月7日
    2
  • Plants Vs Zombies Online_vascular plant

    Plants Vs Zombies Online_vascular plant24 83 2 6 63 910 10 164题解贪心+二分#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 2e5 + 10;ll a[N],st[N]; int n,m;bool check(ll x){ memset(st,0,sizeof st); ll cnt = 0; for(int i = 1;i <= ..

    2022年8月8日
    6
  • vuex mapGetters「建议收藏」

    vuex mapGetters「建议收藏」1、vuex配置//vuex的配置//注意Store是大写conststore=newVuex.Store({//数据保存state:{show:false,count:…

    2022年6月8日
    28
  • &0xffffffff(0x08)

    答案是-2为什么呢这里涉及到有符号整型数的补码,正数的补码与原码相同。负数的补码,将其原码除符号位外的所有位取反后加101111111+01111111=11111110符号位溢出了取反10000001再加110000010结果就得-2在网上看别人代码的时候,经常会看到他们把INF设为0x7fffffff,奇怪为什么设一个这么奇怪的十六进制数,一…

    2022年4月12日
    42

发表回复

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

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