You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL执行SELECT ... FOR UPDATE锁行报1064语法错误如何解决

问题原因

你编写的SQL本身没有语法错误,报错中提到的LIMIT 0, 25是你使用的数据库可视化客户端(如phpMyAdmin、部分版本Navicat等)默认给查询自动追加的分页限制。
MySQL语法要求FOR UPDATE关键字必须放在SELECT查询的最末尾,客户端自动追加的LIMIT插到了FOR UPDATE之后,就触发了1064语法错误。

解决方法

  • 方法1:关闭客户端自动追加分页的配置
    在客户端的设置页面找到查询分页相关选项,关闭自动加LIMIT的功能,或者临时将单次查询的显示行数设置为「全部」,再执行你编写的原始SQL即可。
  • 方法2:手动调整语法顺序
    如果不想修改客户端配置,也可以手动把LIMIT放在FOR UPDATE前面,id是唯一主键,加LIMIT 1不会影响查询结果,调整后的SQL如下:
SET AUTOCOMMIT = 0;
START TRANSACTION;
SELECT * FROM calendar WHERE id = 11 LIMIT 1 FOR UPDATE;
COMMIT;

额外说明

因为你的查询条件使用主键id做精确匹配,InnoDB引擎会直接对id=11的行加排他锁,不会触发表锁或者间隙锁,完全符合你仅锁定单行的需求。

内容的提问来源于stack exchange,提问作者Ste998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:12:00