一起学习网 一起学习网

MySQL Error number: MY-012053; Symbol: ER_IB_MSG_228; SQLSTATE: HY000 报错 故障修复 远程处理

文档解释

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 错误。