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 提供了更灵活的锁控制能力,推荐在新项目中使用。

相关推荐
小蒜学长3 分钟前
基于SpringBoot + Vue的智能健身房管理系统的设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
芦柑46412 分钟前
画布和3D导演台工具:短剧分镜从素材整理到空间预演的完整链路
服务器·前端·数据库
南城以南溫暖如初14714 分钟前
AI 智能商城 APP 定制开发的核心需求
java·人工智能·spring boot·mysql·mybatis·需求分析
专注仿真23 分钟前
TRAE Work 的实战
数据库·人工智能·分析
ACP广源盛1392462567336 分钟前
端侧 AI 硬件架构实践@ACP#中端边缘整机 PCIe 扩展与 IX7012 器件分析
大数据·数据库·人工智能·嵌入式硬件·开源·硬件架构
ACP广源盛1392462567337 分钟前
端侧 AI 硬件架构探讨@ACP#多外设高密度整机 PCIe 扩展与 IX7024 器件分析
大数据·数据库·人工智能·嵌入式硬件·开源·硬件架构
数智启示录1 小时前
Doris精讲篇(六) 从第一批小文件到 -235:Doris 是怎样被正常写入拖死的
大数据·数据库·经验分享·面试·flink
智购科技自动售货机工厂1 小时前
2026自动售货机异常重启根因分析:从日志挖掘到内存取证的技术实践~YH
开发语言·数据库·单片机·嵌入式硬件·人机交互
奈斯先生Vector1 小时前
从“能调用”到“可运营”:AI Agent 进入多模型时代后的架构升级
java·javascript·数据库·人工智能·算法·架构·aigc
whcyhhh1 小时前
头歌实践教学平台:大数据存储2023(十四下答案)
大数据·数据库·python