oracle select语句造成锁行的问题
1、select * from 表 where code in (1,2,3);
2、update 表 set code = 4 where code = 1;
以上两步是平时可能用到的写法,先查询在修改(理解我意思就行)。
如果在高并发的情况下,这种情况更容易发生。
select语句使用非聚族索引查询,会对非聚族索引添加共享锁,由于非聚族索引上没有select的全部数据列。查询产量表时,需要对产量表数据添加共享锁,需要等待Update语句更新完产量表后释放排他锁。即Select等待Update释放锁。
此时产量表上的Update语句更新的时候,会在聚族索引上做定位,添加排他锁和修改非聚族索引的信息,问题就出在修改非聚族索引信息的时候,需要对非聚族做索引添加排他锁。此时select语句已经在聚族索引上面添加了共享锁,需要释放后才能被添加排他锁。即update语句需要等待select语句是否锁。
这样死锁就形成了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具