我正在尝试在 MySQL 5.0 中进行以下形式的更新:
update mytable.myfield t set f = 'blah' where t.id in (select v.id from myview v where ...);
MySQL 告诉我:
ErrorNr. 1443 The definition of table 'v' prevents operation UPDATE on table 't'.
MySQL 文档列出了这个错误,但(像往常一样)没有说明它的含义。任何人都可以为我解释一下吗?我只在子查询中引用视图,我只在主查询中引用表,我不知道为什么这些会阻止更新。我在 google 上发现的唯一一件事是 MySQL 错误数据库中与触发器相关的错误,但是(AFAIK)我的数据库中没有触发器。
我认为视图myview必须基于表mytable,因此当它对myfield进行更改时,它会丢失对视图中内容的跟踪,从而导致非法更新。
我建议查看 myview 的定义,这样您就可以在不引用它的情况下编写查询。那么你也许可以解决它。
或者,将 id 列表转储到临时表并将其用于您的子查询。