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

MySQL 5.5.62 UPDATE关联子查询报错目标表不可更新 需生成排序序列列

报错原因

你遇到的1288报错是MySQL 5.5版本的固有限制导致的:当UPDATE语句中关联的子查询直接读取待更新的目标表时,MySQL会判定该子查询生成的派生表不可更新,避免同表同时读写产生的逻辑冲突。你的语句里子查询q是直接从tbl_a读取数据生成的,而更新的目标表也是tbl_a,就触发了这个限制。

解决方法

你完全不需要用JOIN子查询的复杂写法,MySQL的UPDATE语句本身支持ORDER BY语法,可以直接在更新时按指定字段排序生成序列,写法更简洁,性能也更好:

-- 初始化序列变量
SET @row_number = 0;
-- 按pDateHour升序更新pPrio为连续序列
UPDATE `tbl_a`
SET pPrio = (@row_number := @row_number + 1)
ORDER BY pDateHour ASC;

执行完上述语句后,执行查询SELECT pPrio, pDateHour FROM tbl_a ORDER BY pPrio ASC即可得到你预期的结果。

如果你一定要用JOIN子查询的写法实现,只需要在原有子查询外再套一层临时查询,绕过同表读写限制即可:

SET @row_number = 0;
UPDATE `tbl_a` t
JOIN (
    SELECT pNum, pID FROM (
        SELECT (@row_number := @row_number + 1) pNum, pID 
        FROM `tbl_a` 
        ORDER BY pDateHour ASC
    ) AS tmp
) q ON t.pID = q.pID 
SET t.pPrio = q.pNum;

内容的提问来源于stack exchange,提问作者Edward Sheriff Curtis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:57:05