网站首页 > 精选文章 正文
1,常规死锁的原因是相互持有对方的锁,不能释放导致的
问题是,针对同一张表的两条数据
事务1先开启执行step-1, 对id=1这条数据加排他锁(X锁),
事务2开启 执行step-2,对id=2这条纪录加排他锁(X锁)
事务1执行step-3,此时事务2已经持有id=2的排他锁,所以step-3处于等待状态
事务2 执行step-4,发现事务1已经持有id=1的锁,导致互相等待
报死锁
2,特例死锁:两张表修改同一条数据并且存在外键关联,出现死锁
B表为主表,A表持有B表主键,存在外键关联的情况,如果数据发生变化:增删改情况,mysql都会默认的先去主表查询数据并且增加共享锁,防止当前修改的数据发生
出现死锁的过程:
事务1执行step-1,条件为b_id=1,因为存在外键关联,在修改这条数据的时候,mysql会去主表B查询外键数据,并且默认给B表的id=1的这条数据加共享锁。
事务2执行step-2,同样会发生上面的step-1的情况持有B表的共享锁
事务1执行step-3,执行id=1的数据,发现这条数据有事务2的共享锁,然后进入等待状态
事务2执行step-4,执行id=1的数据,发现这条数据有事务1的共享锁,然后进入相互等待
出现死锁
猜你喜欢
- 2025-07-24 数据库设计规范——3. SQL语句(sql数据库程序设计)
 - 2025-07-24 数据库事务以及事务的四个特性(数据库中的事务)
 - 2025-07-24 一文快速掌握MongoDB(mongodb 入门)
 - 2025-07-24 为啥不推荐使用外键?(为什么不能添加外键约束)
 - 2025-07-24 阿里云代理商:关系型数据库与NoSQL数据库的区别与选择
 - 2025-07-24 多对多关系的数据库设计(数据库中多对多的关系设计)
 - 2025-07-24 Java面试题:数据库优化策略有哪些?
 - 2025-07-24 【推荐】一款实用且跨平台的数据库管理神器,支持Web浏览器
 - 2025-07-24 数据库系统原理:数据插入(数据库插数据语句)
 - 2025-07-24 GBASE南大通用示例,使用 INDEX DISABLED 创建外键约束
 
- 最近发表
 
- 标签列表
 - 
- 向日葵无法连接服务器 (32)
 - git.exe (33)
 - vscode更新 (34)
 - dev c (33)
 - git ignore命令 (32)
 - gitlab提交代码步骤 (37)
 - java update (36)
 - vue debug (34)
 - vue blur (32)
 - vscode导入vue项目 (33)
 - vue chart (32)
 - vue cms (32)
 - 大雅数据库 (34)
 - 技术迭代 (37)
 - 同一局域网 (33)
 - github拒绝连接 (33)
 - vscode php插件 (32)
 - vue注释快捷键 (32)
 - linux ssr (33)
 - 微端服务器 (35)
 - 导航猫 (32)
 - 获取当前时间年月日 (33)
 - stp软件 (33)
 - http下载文件 (33)
 - linux bt下载 (33)
 
 
