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

SELECT ... FOR SHARESELECT ... LOCK IN SHARE MODE 在功能上是完全等价的FOR SHARE 是在 MySQL 8.0 版本中引入的新标准 SQL 语法,旨在作为 LOCK IN SHARE MODE 的替代方案,后者则作为旧语法保留以确保向后兼容。

核心功能都是对读取的行加共享锁(Shared Lock) ,锁在事务提交或回滚时才会释放。加上共享锁后,其他事务可以读取,但无法修改或删除这些行,直到当前事务结束。

📝 主要区别:新语法优势

FOR SHARE 的主要优势在于支持更多选项,提供了更精细的控制能力:

  • 支持 OF 表名 子句 :在多表连接查询时,可以只锁定特定表的行。这对于需要处理多表关联的复杂事务非常有用,避免了对不必要表的锁定,能提升并发性能。
  • 支持 NOWAITSKIP LOCKED 选项 :用于处理锁等待的问题。
    • NOWAIT :若请求的行已被其他事务锁定,立即报错返回,不再等待。
    • SKIP LOCKED :若请求的行已被其他事务锁定,直接跳过,只返回未被锁定的行。

💎 总结与建议

简单来说,FOR SHARE 是更现代、功能更强的写法。建议在新的开发工作中优先使用它。

语法示例对比

sql 复制代码
-- 旧语法 (仍可用,但不推荐)
SELECT * FROM table_name WHERE id = 1 LOCK IN SHARE MODE;

-- 新语法 (推荐使用)
SELECT * FROM table_name WHERE id = 1 FOR SHARE;

-- FOR SHARE 的高级用法示例 (连接查询中只锁定特定表,并设置等待策略)
SELECT * FROM parent p JOIN child c ON p.id = c.parent_id
WHERE p.name = 'Jones' FOR SHARE OF p NOWAIT;

总结来说,FOR SHARELOCK IN SHARE MODE 的核心功能相同,但 FOR SHARE 提供了更灵活的锁控制能力,推荐在新项目中使用。

相关推荐
buhuizhiyuci4 分钟前
【算法篇】位运算 —— 基础篇
java·数据库·算法
川石课堂软件测试7 分钟前
安全测试|服务器安全加固方法
服务器·功能测试·测试工具·jmeter·mysql·web安全·单元测试
youtootech13 分钟前
HarmonyOS《柚兔学伴》项目实战08-关系型数据库入门——待办事项持久化
jvm·数据库·华为·harmonyos
微三云 - 廖会灵 (私域系统开发)25 分钟前
电商系统国际化架构设计:多语言、多币种、多时区、多税制的全链路实现
java·前端·数据库
周杰伦的稻香1 小时前
PostgreSQL中的METHOD(认证方法)
数据库·postgresql
万岳科技系统开发1 小时前
智慧医院小程序开发满足医疗机构多场景服务需求
数据库·学习·小程序
kisbad1 小时前
Day 012|Embedding 和向量数据库:知识库检索到底在检什么
数据库·python·embedding·agent
谷禾牛博1 小时前
肠道菌群检测流程及差异和技术门槛在哪里?
数据库·经验分享·功能测试
Zhu7582 小时前
对docker环境的postgresql数据库做快速初始化
数据库·docker·postgresql
Wang's Blog2 小时前
Go-Zero项目开发5: 数据库与缓存一致性问题及 go-zero 缓存机制解析
数据库·缓存·golang