Error number: MY-012053; Symbol: ER_IB_MSG_228; SQLSTATE: HY000
Message: %s
MySQL 错误 ER_IB_MSG_228 代表:Can’t specify target table for update in FROM clause
错误说明:
ER_IB_MSG_228 是MySQL 服务器定义的错误,通常发生在更新操作过程中。它是由于SQL 语句中在FROM 条款中指定了更新目标表而引发的错误,即MySQL 将更新操作关联到一个以外键和主键关系相连接的表上,这是一种不允许或不支持的操作。
ER_IB_MSG_228 是在尝试从表A 中将行复制到表B 中时会引发的。示例SQL 语句如下:
update tableB b set b.value = a.value
from tableA a
where b.id = a.id
此语句把表A 中的值更新到表B 中。但是,可以看到表B 已在FROM 子句中指定了,会导致MySQL 引发 ER_IB_MSG_228。
解决方法:
要解决 ER_IB_MSG_228,可以先将更新操作拆分为两个语句,先完成FROM 子句,然后再完成更新操作。示例SQL 语句如下:
update tableb b
set b.value = (select a.value
from tablea a
where b.id = a.id)
此更新操作首先是通过查询表A 来查找匹配ID 的值,然后将该值转移到表B 中。这样就能够避免在更新操作中使用表B,从而解决 ER_IB_MSG_228 错误。