Mysql--基础知识点--110--select ... lock in share mode VS select ... for share

张开发
2026/4/17 10:57:51 15 分钟阅读

分享文章

Mysql--基础知识点--110--select ... lock in share mode VS select ... for share
SELECT ... FOR SHARE和SELECT ... LOCK IN SHARE MODE在功能上是完全等价的。FOR SHARE是在 MySQL 8.0 版本中引入的新标准 SQL 语法旨在作为LOCK IN SHARE MODE的替代方案后者则作为旧语法保留以确保向后兼容。核心功能都是对读取的行加共享锁Shared Lock锁在事务提交或回滚时才会释放。加上共享锁后其他事务可以读取但无法修改或删除这些行直到当前事务结束。 主要区别新语法优势FOR SHARE的主要优势在于支持更多选项提供了更精细的控制能力支持OF 表名子句在多表连接查询时可以只锁定特定表的行。这对于需要处理多表关联的复杂事务非常有用避免了对不必要表的锁定能提升并发性能。支持NOWAIT和SKIP LOCKED选项用于处理锁等待的问题。NOWAIT若请求的行已被其他事务锁定立即报错返回不再等待。SKIP LOCKED若请求的行已被其他事务锁定直接跳过只返回未被锁定的行。 总结与建议简单来说FOR SHARE是更现代、功能更强的写法。建议在新的开发工作中优先使用它。语法示例对比-- 旧语法 (仍可用但不推荐)SELECT*FROMtable_nameWHEREid1LOCKINSHAREMODE;-- 新语法 (推荐使用)SELECT*FROMtable_nameWHEREid1FORSHARE;-- FOR SHARE 的高级用法示例 (连接查询中只锁定特定表并设置等待策略)SELECT*FROMparent pJOINchild cONp.idc.parent_idWHEREp.nameJonesFORSHAREOFp NOWAIT;总结来说FOR SHARE和LOCK IN SHARE MODE的核心功能相同但FOR SHARE提供了更灵活的锁控制能力推荐在新项目中使用。

更多文章