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

相关推荐
李白客12 小时前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
ClouGence15 小时前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将17 小时前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils2 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波2 天前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
Jim6002 天前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL3 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_3 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_6 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库