MySQL基础学习: 由delete和insert操作导致的死锁问题

一、问题复现:表结构

复制代码
CREATE TABLE `user_props` (
  `user_id` bigint NOT NULL ,
  `prop_key` varchar(100) NOT NULL ,
  `prop_value` varchar(100) NOT NULL,
  PRIMARY KEY (`user_id`,`prop_key`)
)

二、死锁测试

(1)开启两个事务

(2)两个事务分别删除两个个不存在的记录

(3)两个事务分别插入该记录

开启事务1

开始事务2

现象描述:

(1)两个事务分别执行delete操作

(2)事务1执行insert操作,阻塞

(3)事务2执行insert操作,产生死锁报错

(4)事务1insert操作成功

三、产生死锁的原因

当删除的记录在数据库中存在,那么产生的就是普通的行锁。当删除的这条记录不存在,会在删除记录所在的区间加间隙锁。

四、解决方案

在删除记录前,先校验下该记录是否存在,如果存在在执行删除操作。

相关推荐
炘爚8 小时前
日志系统整体设计步骤以及功能函数梳理
运维·服务器·数据库
_下雨天.8 小时前
PostgreSQL日常维护
数据库·postgresql
神の愛8 小时前
本地连接MySql数据库报错??
数据库·mysql
黑牛儿8 小时前
MySQL 索引实战详解:为什么B+类型的索引查询更快
数据库·mysql
向上的车轮8 小时前
如何用DeepSeek定制大模型——智能Text-to-SQL专家系统
数据库·sql
一个有温度的技术博主8 小时前
Redis主从同步进阶:深入理解增量同步与性能优化
数据库·redis·性能优化
榮華8 小时前
DOTA全图透视辅助下载DOTA全图科技辅助下载DOTA外挂下载魔兽争霸WAR3全图下载
数据库·科技·游戏·游戏引擎·游戏程序·ai编程·腾讯云ai代码助手
蓝眸少年CY9 小时前
Hbase - 入门到实战
大数据·数据库·hbase
DROm RAPS9 小时前
SQL中如何添加数据
数据库·sql
zzh0819 小时前
MySQL故障排查与优化笔记
数据库·笔记·mysql