首页 > 数据库 >数据库死锁原因以及解决

数据库死锁原因以及解决

时间:2023-07-16 13:46:10浏览次数:46  
标签:事务 多表 数据库 更新 死锁 解决 操作 数据

有一篇讲了mvcc的基本原理:https://www.cnblogs.com/benjerry/p/17551031.html

这样就知道最简单的死锁产生原因,就是有两个并发事务,事务1先更新a表某行数据,再更新b表某行数据,事务2先更新b表同行数据,再更新a表同行数据,就非常有可能死锁了。

还有种写法,select for update,将共享锁上升到独占锁,也可能死锁。

 

先谈谈如果我们开启事务更新多表的时候的注意事项:

第一点,就是开启事务操作多表尽量不要批量操作数据

第二点,对于相同表的操作尽量顺序一致,不要事务1更新ab,事务2更新ba

第三点,事实上很多时候可以从需求上和代码逻辑上缓和这种事务上的多表操作,

比如代码上,我就不开事务操作多表,因为通常来说代码足够稳定,逻辑写的足够好,不开事务也是可以正确执行的,直接用事务包裹实际上是一种为了数据安全的暴力操作,是下策;我完全可以在程序出错时,多写几条数据恢复的sql执行。

再说需求上,如果我们的目的是希望数据安全能被兜底,那也完全可以提示用户数据出错,希望他手动删除脏数据。

 

解决方法

 查询到死锁线程kill掉

标签:事务,多表,数据库,更新,死锁,解决,操作,数据
From: https://www.cnblogs.com/benjerry/p/17552592.html

相关文章

  • DBConvert Studio - 数据库迁移和同步
    概述DBConvertStudio是一款强大的跨数据库迁移和同步软件,可以在不同数据库格式之间转换数据库结构和数据。它将成熟、稳定、久经考验的DBConvert和DBSync核心与改进的现代UX设计相结合。 数据库迁移场景 支持所有流行的数据库-从旧的基于文件的格式到现代的本......
  • dotnet 连接使用ef orm连接sqlite数据库的小demo
    EF6SQLiteTutorial/Program.csusingEF6SQLiteTutorial.Data;usingMicrosoft.EntityFrameworkCore;varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.builder.Services.AddControllers();//LearnmoreaboutconfiguringSwag......
  • springboot中解决redissonClien无法注入,封装工具雷
    引用:https://blog.csdn.net/feiying0canglang/article/details/120464693问题来源前几天遇到一个循环依赖问题,是RedissonClient这个bean引起的。RedissonClient是由一个配置类(@Configuration注解的类)提供的,这配置类在初始化时(@PostConstruct注解的方法中)去获取RedissonClient这......
  • PPT|智慧实验室物联网解决方案P33
    ......
  • 深入理解MySQL数据库索引优化
    在现代应用程序中,数据库是至关重要的组成部分。MySQL作为一种常用的关系型数据库管理系统,索引是其性能优化的关键。本文将深入介绍MySQL数据库索引的概念、类型以及优化技巧,帮助读者更好地理解和利用索引提升数据库查询性能。1.什么是索引?索引是一种数据结构,用于快速定位和访问数......
  • dotnet 连接sqlite数据库 orm EntityFrameworkCore
    dotnet_learn/appsettings.json{"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"}},"AllowedHosts":"*"}d......
  • mysql 数据库 1130 error
    mysql-uroot-p接下来输入刚刚创建的密码  成功进入之后需要输入以下命令usemysql;  //切换数据库updateusersethost='%'whereuser='root';  输入完成之后 selectHost,Userfromuser;查看以下修改结果 +-----------+---------------+|Host|User......
  • SpringBoot中整合Sharding Sphere实现数据加解密/数据脱敏/数据库密文,查询明文
    场景为防止数据泄露,需要在插入等操作时将某表的字段在数据库中加密存储,在需要查询使用时明文显示。ShardingSphereShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。......
  • 数据库连接池之c3p0-0.9.1.2,16年的古董,发生连接泄露怎么查(二)
    背景本篇是c3p0连接泄露问题的第二篇,在前面一篇里面,大体介绍了问题,问题就是,我们发现线上服务不响应的原因是拿不到连接。而为啥拿不到连接呢,因为空闲链表为空,那么为什么空闲链表为空呢?这个我一开始的猜测就是,估计是某处代码从连接池里获取了连接,用完了没有归还,那么,怎么才能找到......
  • office软件提示“您的组织策略阻止我们进行该操作”错误的解决办法-终极汇总
    环境系统:win1064位专业版时间:2023年7月15日1.选择默认软件在设置中打开默认应用,将web浏览器改为你想要的浏览器 2.修改注册表同时按下win+R,输入regedit打开注册表。修改计算机\HKEY_CURRENT_USER\Software\Classes\.html路径下的值为Htmlfile 3.重启office软件或......