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

MySQL执行UPDATE部分记录报错1242:子查询返回多行如何解决

问题成因

你执行的UPDATE语句本身没有嵌套子查询,报错Error Code: 1242. Subquery returns more than 1 row的根因是files表上绑定了UPDATE类型的触发器:
触发器的逻辑中存在未限制返回行数的子查询,当你更新id=105的记录时,该条记录的token有值,触发了子查询执行逻辑,且该token值匹配到了子查询结果集中的多条记录,因此抛出错误;而id=100的记录token为空,刚好跳过了触发器中子查询的执行分支,因此不会触发报错。该问题和记录锁定、token字段本身的取值没有直接关联。

排查步骤
  • 首先执行以下语句查询files表绑定的所有触发器:
    SHOW TRIGGERS LIKE 'files';
    
  • 筛选出Event为UPDATE的触发器,执行以下语句查看触发器的完整定义(将下方<触发器名称>替换为你查到的实际触发器名):
    SHOW CREATE TRIGGER <触发器名称>;
    
  • 查找触发器定义中类似SET @变量 = (SELECT 字段 FROM 其他表 WHERE 条件 = NEW.token)的写法,确认当NEW.token为b6d8cf9af75faec429199a6150aa38a094547332时,该子查询的返回结果是否超过1行。
解决方案
  • 如果业务允许子查询取任意一条匹配结果,直接在子查询末尾添加LIMIT 1,确保子查询始终只返回1行结果即可。
  • 如果业务要求子查询必须返回唯一匹配结果,调整子查询的WHERE筛选条件,增加唯一字段(比如主键id)作为筛选项,避免出现多匹配的情况。
  • 如果该触发器为冗余无用逻辑,直接执行DROP TRIGGER <触发器名称>;删除触发器即可。

修改完成后重新执行你的UPDATE语句即可正常更新id=105的记录。

内容的提问来源于stack exchange,提问作者Pessi S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:45:02