innodb_locks_unsafe_for_binlog 是 MySQL 5.6 及更早版本中用于禁用间隙锁的参数,但自 5.7 起废弃、8.0 完全移除,现无效且启动会警告;避免间隙锁应依赖唯一索引等值查询、优化索引与 SQL 写法,而非该参数。innodb_locks_unsafe_for_binlog 是什么,现在还该用吗这个配置项在 MySQL 5.6 及更早版本中存在,作用是关闭 Gap Lock(间隙锁),让 InnoDB 在可重复读(RR)隔离级别下退化为类似读已提交(RC)的锁行为。但自 MySQL 5.7 起,它已被废弃;MySQL 8.0 完全移除。如果你在配置文件里还写了 innodb_locks_unsafe_for_binlog=1,启动时会报警告,且不生效。真正影响锁行为的是事务隔离级别本身,以及是否启用唯一索引、查询条件是否命中索引等。别再试图靠这个参数"绕过"间隙锁------它已经没用了。怎么让 RR 级别下不加 Gap LockGap Lock 不是由某个开关控制的,而是由「隔离级别 + 索引类型 + 查询条件」共同决定的。想避免 Gap Lock,核心是让 InnoDB 能精确锁定记录,而不是范围。用唯一索引(含主键)做等值查询:比如 SELECT * FROM t WHERE id = 10 FOR UPDATE,只锁住 id=10 这一行,不锁间隙避免范围查询:WHERE id > 10 或 WHERE name LIKE 'a%' 在非唯一索引上大概率触发 Gap Lock确认查询走了索引:用 EXPLAIN 看 type 是否为 const / eq_ref / ref;如果显示 ALL 或 index,很可能锁整段索引区间不要在 RR 下依赖"不加间隙锁"来提升并发:这容易引发幻读,尤其在有 INSERT 场景时为什么改隔离级别到 READ-COMMITTED 也不总能禁掉 Gap LockRC 确实不加 Gap Lock,但有个关键例外:外键约束检查和唯一键冲突检测时,InnoDB 仍会加间隙锁防止并发插入破坏约束。比如两个事务同时 INSERT 相同唯一值,其中一个必须等另一个提交或回滚,背后就是间隙锁在起作用。 Tellers AI Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。
相关推荐
老毛肚5 小时前
jeecg-boot-base-core 02 dayyaoxin5211235 小时前
434. Java 日期时间 API - Period 基于日期的时间段岁月宁静6 小时前
RAG 文档摄入全链路,从原理到生产落地火山上的企鹅6 小时前
Codex实战:APP远程升级服务搭建(三)后台管理页面(APK 上传、版本管理、多应用页签)程序员二叉7 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理JaydenAI7 小时前
[对比学习LangChain和MAF-07]如何引入人机交互的审批流程阿狸猿7 小时前
论 NoSQL 数据库技术及其应用神奇元创7 小时前
商用级光路加速卡:大模型推理的极速落地方案FBI HackerHarry浩7 小时前
DataGrip2023.2.3默认保存的数据库和.sql文件在哪里?怎么修改默认路径?袁小皮皮不皮7 小时前
3.HCIP OSPF补充知识(优化版)