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是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。
相关推荐
ZFSS1 天前
Localization Translate API 集成与使用指南TechWayfarer1 天前
查询IP所在地的3种方案:从API到离线库,风控场景怎么选?程序员榴莲1 天前
Python 单例模式hh.h.1 天前
昇腾CANN ops-transformer 仓的 MC2 算子:MoE 模型的全到全通信东风破1371 天前
达梦DMDRS搭建、以及DMDRS双向同步KaMeidebaby1 天前
卡梅德生物技术快报|抗独特型抗体开发:半抗原检测技术瓶颈拆解,抗独特型抗体开发工程化实践NiceCloud喜云1 天前
Claude Files API 深入:从上传、复用到配额管理的工程化指南专注VB编程开发20年1 天前
windows下python自带标准库 ≈ 70% 纯.py 源码,30% .pyd(DLL)萌新小码农1 天前
人工智能数学基础+python实例(人工智能学习day3)