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

时间:2012-02-15 01:53:30

标签: 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 = 'Fred';

create user 'Fred';

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


delete from v1 where v1.shows = 17;`

外观表有show和isShownIn列。

1 个答案:

答案 0 :(得分:1)

MySQL文档声明:

  

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

MySQL正在按设计执行,并且阻止您在这里拍摄自己。实质上,从视图中删除的行数与从基础表中删除的行数不匹配。此外,你想删除照片,外观,人物或摄影师吗?还是所有人?或者只是其中一些? MySQL也不确定,所以它不允许操作。

请注意,运行此查询:

SELECT IS_UPDATABLE
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'v1';

如果结果不是“是”,那么您可能需要考虑重新设计视图。另一种选择是直接从基础表中删除。

使用“WITH CHECK OPTION”子句创建可更新视图也是一个好主意。这可以防止对基础表的UPDATE或INSERT,除了那些满足视图的WHERE子句中定义的条件的表。或者在你的情况下,防止弗雷德弄乱鲍勃的照片。