MySQL 执行数据库更新update操作的时候数据库卡死了


Posted in MySQL onMay 02, 2022

执行数据库更新update操作的时候数据库卡死了

问题分析

一般都是数据库事务未提交,导致update或者delete卡死。

解决办法

  1. 在执行完更新或删除后,记得将事务提交commit;
  2. 找到数据库客户端,执行commit操作。

如果还不行。 那么应该是数据库在执行数据操作失败 or 事务未提交 之后,将需要执行的sql语句锁死了。

过程复现和解决

通过如下命令查看数据库的自动提交状态

show variables like 'autocommit';

通过SQL设置数据库自动自动提交为关闭

-- on为开启,off为关闭
set autocommit=off;
-- 或者1为开启,0为关闭
set autocommit=0;

表中数据如下:
MySQL 执行数据库更新update操作的时候数据库卡死了
打开两个窗口分别执行update操作

update car set color ='银色' where id = 1;
update car set color ='红色' where id = 1;

查询正在执行的事务:

SELECT * FROM information_schema.INNODB_TRX;

MySQL 执行数据库更新update操作的时候数据库卡死了
根据图中事务的线程ID(trx_mysql_thread_id)可以看出对应的mysql 线程:一个1084 (update正在等待锁)另一个是1089(update 正在执行 没有提交事务)

可以使用mysql命令杀掉线程:kill 线程id

kill 1089;

期间如果并未杀掉持有锁的线程:则第二个update语句会提示等待锁超时。
MySQL 执行数据库更新update操作的时候数据库卡死了
相关命令:

-- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

-- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 查询mysql数据库中存在的进程
select * from information_schema.`PROCESSLIST`(show processlist;)

扩展

oracle的操作方式:

  1. 查询锁定记录
SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;
  1. 删除锁定记录
ALTER system KILL session 'SID,serial#';

Tags in this post...

MySQL 相关文章推荐
MySQL表的增删改查(基础)
Apr 05 MySQL
Mysql - 常用函数 每天积极向上
Apr 05 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
MySQL 常见的数据表设计误区汇总
Jun 07 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 MySQL
mysql全面解析json/数组
Jul 07 MySQL
MySQL添加索引特点及优化问题
Jul 23 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 MySQL
MySql统计函数COUNT的具体使用详解
Aug 14 MySQL
详解MySQL的内连接和外连接
May 08 MySQL
MySQL如何使备份得数据保持一致
MySQL索引 高效获取数据的数据结构
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 #MySQL
解决Mysql中的innoDB幻读问题
Apr 29 #MySQL
详解Mysq MVCC多版本的并发控制
详解Mysql事务并发(脏读、不可重复读、幻读)
MySQL 条件查询的常用操作
Apr 28 #MySQL
You might like
PHP脚本的10个技巧(3)
2006/10/09 PHP
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
python登录豆瓣并发帖的方法
2015/07/08 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
python实现图片批量压缩程序
2018/07/23 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
两年的个人工作自我评价
2014/01/10 职场文书
卫校中专生的自我评价
2014/01/15 职场文书
一年级语文教学反思
2014/02/13 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
校园广播稿精选
2014/10/01 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
Python中re模块的元字符使用小结
2022/04/07 Python