MySQL触发器处理死锁的防范方法_MySQL高并发触发器优化

触发器中避免跨表写操作、禁止SELECT...FOR UPDATE、不依赖MAX(id)等自增推导,推荐应用层异步处理或预分配ID,并通过死锁日志和performance_schema定位问题。触发器里别碰其他表的写操作死锁在触发器里爆发,八成是因为它偷偷去改了别的表。比如 INSERT 一个订单后,触发器顺手去 UPDATE 库存表,而另一条事务正相反------先锁库存再插订单,两边一卡,就 deadlock 了。实操建议:触发器逻辑尽量只操作当前表(NEW 和 OLD 所属的表),避免 UPDATE/DELETE 其他表真要联动更新,改用应用层异步处理(比如发 MQ 消息),或退一步用延迟写入(如插入到日志表,由定时任务批量处理)查 SHOW ENGINE INNODB STATUS 时重点看 *** (1) WAITING FOR THIS LOCK TO BE GRANTED: 后面是不是跨表锁避免在触发器中调用存储函数或复杂子查询看起来只是读个配置值,但万一那个 SELECT 带了 FOR UPDATE 或命中了没索引的字段,就会拉长锁持有时间,提高死锁概率。实操建议:触发器内禁止出现 SELECT ... FOR UPDATE、SELECT ... LOCK IN SHARE MODE所有读操作必须走覆盖索引;如果要查配置,优先用常量或应用层缓存,而不是实时查 config_table用 EXPLAIN 确认触发器里每个 SELECT 的 type 是 const 或 ref,不是 ALL 或 indexINSERT 触发器慎用 BEFORE INSERT + 自增主键依赖当多个并发 INSERT 都在 BEFORE INSERT 里试图读取 MAX(id) 或调用 LAST_INSERT_ID(),很容易因为间隙锁(gap lock)互相阻塞,尤其在可重复读隔离级别下。 唱鸭 音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

相关推荐
z1234567898613 分钟前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD15 分钟前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
兜客互动24 分钟前
2026年AI关键词拓展挖掘软件,高效助力内容创作精准获流
人工智能·python
weixin_5386019726 分钟前
智能体测开Day30pytest测试框架
python
MC皮蛋侠客28 分钟前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
邪神与厨二病40 分钟前
牛客周赛 Round 153
python·算法
yaoxin5211231 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
groundhappy1 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
TlSfoward1 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记1 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘