首页 > 数据库 >Mysql死锁解决办法

Mysql死锁解决办法

时间:2022-08-17 00:24:28浏览次数:63  
标签:COMMENT 解决办法 UPDATE 死锁 Mysql NULL where id SELECT

使用navicat客户端工具连接上测试的mysql数据库,新建一个测试表

CREATE TABLE `t_user` (

  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',

  `login_name` varchar(50) NOT NULL COMMENT '用户名',

  `pwd` varchar(50) NOT NULL COMMENT '密码',

  `nick_name` varchar(90) DEFAULT NULL COMMENT '用户昵称',

  `usable` int(11) NOT NULL DEFAULT '1' COMMENT '是否可用 0:不可用;1:可用',

  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

  `last_login_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后登录时间',

  PRIMARY KEY (`id`),

  UNIQUE KEY `login_name` (`login_name`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户表';

数据如图所示:

 

打开一个新的会话窗口,执行以下语句

set autocommit=0; --关闭自动提交

SELECT * from t_user t where t.id='1' FOR UPDATE; 给id为1的数据行添加行锁

打开另一个新的会话窗口,执行以下语句

set autocommit=0; --关闭自动提交

SELECT * from t_user t where t.id='2' FOR UPDATE; 给id为2的数据行添加行锁

这个时候,2和3步骤各持了一把锁。下面开始在会话一执行

SELECT * from t_user t where t.id='2' FOR UPDATE; 

会出现锁等待的情况

在会话二里执行

SELECT * from t_user t where t.id='1' FOR UPDATE; 

则出现了死锁提示:

ERROR 1213 : Deadlock found when trying to get lock; try restarting transaction

mysql自动检测到了两个会话互相等待锁的情况,则把最后一个会话做了回滚操作

 

 

可以通过以下三个语句来查询被打开的表,正在执行的任务列表和开启的事务

show OPEN TABLES where In_use > 0;

show processlist; -- kill杀死进程id(id列)

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

-- kill杀死进程id(trx_mysql_thread_id列)

 

 

 

 

 

标签:COMMENT,解决办法,UPDATE,死锁,Mysql,NULL,where,id,SELECT
From: https://www.cnblogs.com/47Gamer/p/16593493.html

相关文章

  • mysql 慢了8小时的处理 mongo
    dockermysql时间差8个小时的解决方案1.临时改(重启就失效)  showvariableslike'%time_zone%';  2.解决方案,修改本地(验证过了)dockercp/usr/share/zonei......
  • MySQL之约束条件
    约束条件primarykeyprimarykey主键单从约束角度讲主键等价于非空且唯一notnullunique1.创建一个非空且唯一的表createtablep1(idintnotnullunique,namevar......
  • mysql容器数据同步的一种方式
    同步操作流程1.找到MySQL的容器sudodockerps|grepmysql2.进入docker容器sudodockerexec-it容器idbash3.1.dump源端数据库(单个)mysqldump-hhost-Pport-utes......
  • 2022-08-16 第六小组 张宁杰 Mysql数据库(2)
    DQL数据库查询语言重点,DQL是我们每天都要接触编写最多也是最难的SQL,该语言用来查询记录,不会修改数据库和表结构。构建数据库创建一张student表:DROPTABLEIFEXISTSst......
  • mysql-3
    目录约束条件约束条件之外键ForeignKey表关系之多对多表关系之一对一约束条件1.primarykey主键 1.单从约束角度上而言主键等价于非空且唯一notnullunique cre......
  • Mysql
    --查看所有变量showvariables;--查看当前mysql最大连接数SHOWVARIABLESLIKE'max_connections%';--查看当前慢日志的入录时长单位是(秒)showvariableslike'long%'......
  • MySQL查询执行流程-SQL解析顺序
    前言一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了。本文将从MySQL总体架构--->查询执行流程--->语......
  • MySQL 日期相关
    NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()提取日期或日期/时间表达式的日期部分EXTRACT()返回日期/时间按的单独部分DAT......
  • 【2022.8.16】MySQL数据库(3)
    学习内容概要约束条件之主键约束条件之外键操作表的SQL语句补充内容详细约束条件1.主键:primarykey主键含义:从约束角度上而言主键等于非空且唯......
  • Mysql limit、offset 使用
    1、原表数据//全表数据select*fromsummer_test;2、使用limit//查询符合条件的4条数据,如果只有1条数据符合条件则返回1条数据select*fromsummer_......