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

这篇具有很好参考价值的文章主要介绍了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
MySQL基础学习: 由delete和insert操作导致的死锁问题,【MySQL】,数据库,mysql
开始事务2
MySQL基础学习: 由delete和insert操作导致的死锁问题,【MySQL】,数据库,mysql
现象描述:
(1)两个事务分别执行delete操作
(2)事务1执行insert操作,阻塞
(3)事务2执行insert操作,产生死锁报错
(4)事务1insert操作成功

三、产生死锁的原因

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

四、解决方案

在删除记录前,先校验下该记录是否存在,如果存在在执行删除操作。文章来源地址https://www.toymoban.com/news/detail-775339.html

到了这里,关于MySQL基础学习: 由delete和insert操作导致的死锁问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL注入_insert&delete&update&selete

    一. SQL注入介绍 1.1 sql注入概念 1.1.1 sql注入的实质:数据库将用户输入的数据当作代码执行 1.1.2 sql注入产生的条件 用户能控制输入 原本程序要执行的代码,拼接了用户输入的数据然后进行执行 1.2 sql注入注入点判断 1.2.1 判断是否存在可控变量 抓包判断 如图所示,id=1与subm

    2023年04月16日
    浏览(35)
  • 【操作系统】死锁问题---死锁的消除方法

    本文章将主要解释死锁的消除方法 一、死锁的概念         这是《操作系统》对于死锁的定义: 有并发进程P1,P2,…Pn,它们共享资源R1,R2,…Rm (n0,m0, n=m)。其中,每个Pi(1≤i≤n)拥有资源Rj(1≤j ≤m),直到不再有剩余资源。同时,各Pi又在不释放Rj的前提下要求Rk(k≠j,1≤k ≤m),

    2024年02月15日
    浏览(41)
  • MySQL事务死锁问题排查

    在预发环境中,由消息驱动最终触发执行事务来写库存,但是导致MySQL发生死锁,写库存失败。 初步排查,在同一时刻有两条请求进行写库存的操作。 时间前后相差1s,但最终执行结果是,这两个事务相互死锁,均失败。 事务定义非常简单,伪代码描述如下: 该数据库表的

    2024年02月08日
    浏览(41)
  • MySQL innoDB 间隙锁产生的死锁问题

    线上经常偶发死锁问题,当时处理一张表,也没有联表处理,但是有两个mq入口,并且消息体存在一样的情况,频率还不是很低,这么一个背景,我非常容易怀疑到,两个消息同时近到这一个事务里面导致的,但是是偶发的,又模拟不出来什么场景会导致死锁,只能进行代码

    2024年02月08日
    浏览(38)
  • MySQL遇到过死锁问题吗,你是如何解决的?

    MySQL遇到过死锁问题吗,你是如何解决的? 问题解析 死锁,就是两个或者两个以上的线程在执行过程中,去争夺同一个共享资源导致互相等待的现象。 在没有外部干预的情况下,线程会一直处于阻塞状态,无法往下执行。 要想真正产生死锁,必须同时满足四个条件。互斥条

    2024年02月02日
    浏览(50)
  • 记录一个Insert姿势引起的MySQL从库上查不到数据的问题

    转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 某测试环境的MySQL用了两台节点,主从同步结构。忽然有研发同学反映说MySQL的主从不同步了。他在测试代码功能的时候,调用接口在主库insert了一条数据,然后发现

    2024年01月22日
    浏览(41)
  • MySQL next-key锁引发的死锁问题分析与处理

    当方法A被多线程并发执行的时候会偶现死锁问题,分析问题: 因为业务上有限制:每次并发执行方法A的时候,每个线程执行到sql里面的参数:data_name_en有可能是一样的,但是空间#{tenantId}肯定都是不一样的,也就是并发时候,线程1要删除和插入的数据一定和线程2要删除和插

    2024年02月11日
    浏览(47)
  • 增删改undo生成量??index是否写undo?Oracle DML语句(insert,update,delete) ‘回滚开销估算‘

    --insert操作 undo记录什么 --update操作 undo记录什么 --delete操作 undo记录什么 //index是否写undo? 结论是写。可通过对比加index之前和加index之后的undo生成量进行对比得出结论。 //undo数据产生量 redo中只会记录少量信息,这些信息足以重演事务; undo中也只记录精简信息,这些信息足以撤

    2024年01月23日
    浏览(47)
  • MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

    使用 ORDER BY 语句按升序或降序对结果进行排序。 ORDER BY 默认按升序排序。要按降序排序结果,使用 DESC 。 示例按名称按字母顺序排序结果: ORDER BY DESC 使用 DESC 以降序排序结果。 示例按名称以字母逆序排序结果: 您可以使用\\\"DELETE FROM\\\"语句从现有表格中

    2024年02月05日
    浏览(78)
  • 记低版本okhttp超时会导致死锁

    一、问题起源 在处理一次生产环境cpu拉满问题时,把日志拉下来看发现很多http请求调用出错,项目使用的是okhttp 3.8.1版本。 二、问题描述 问题出在 okhttp3.Dispatcher.finished(Dispatcher.java:201) 代码如下: 三、分析代码 在OkHttpClient中 final Dispatcher dispatcher;  作为成员对象,而我们

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包