MySQL错误:1395无法从join视图中删除

MySQL错误:1395无法从join视图中删除,mysql,Mysql,我试图从一个视图中删除一条记录,该视图是由多个表的联接生成的。我有一个新用户要删除并插入此特定视图。我可以将记录插入视图,但不能从视图中删除。您能指出下面这段SQL语句中的一个错误吗 create view v1 as select a.* from appearance a, photo p, photographer u, person s where a.isShownIn = p.id and p.takenBy = u.id and u.id = s.id and s.name =

我试图从一个视图中删除一条记录,该视图是由多个表的联接生成的。我有一个新用户要删除并插入此特定视图。我可以将记录插入视图,但不能从视图中删除。您能指出下面这段SQL语句中的一个错误吗

create view v1 as
select a.* 
from appearance a, photo p, photographer u, person s
where a.isShownIn = p.id
and p.takenBy = u.id
and u.id = s.id
and s.name = 'Fred';

create user 'Fred';

grant insert, delete on assignment_5.v1 to 'Fred';


delete from v1 where v1.shows = 17;`

外观表有shows和IsShowIn列。

MySQL文档说明:

“要使视图可更新,必须存在一对一的关系 在视图中的行和基础表中的行之间。“

MySQL的性能符合设计要求,并防止您在这里自食其果。本质上,将从视图中删除的行数与将从基础表中删除的行数不匹配。另外,是否要删除照片、外观、人物或摄影师?还是全部?或者只是其中的一部分?MySQL也不确定,所以它不允许这个操作

请记住,运行以下查询:

SELECT IS_UPDATABLE
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'v1';
如果结果不是“是”,那么你可能需要考虑重新设计视图。另一种选择是直接从基础表中删除


使用“WITH CHECK OPTION”子句创建可更新视图也是一个好主意。这将防止对基础表进行更新或插入,但满足视图WHERE子句中定义的条件的表除外。或者在你的情况下,防止Fred弄乱Bob的照片。

即使我的视图是可更新的,我也会遇到同样的错误!SELECT可从信息_SCHEMA.VIEWS中更新,其中表_NAME='v_option_batch';结果是肯定的。我可以更新视图,但不能从中删除。