gpt4 book ai didi

MySQL 错误 : 1395 Can not delete from join view

转载 作者:行者123 更新时间:2023-11-29 03:10:28 24 4
gpt4 key购买 nike

我正在尝试从连接多个表生成的 View 中删除一条记录。我有一个新用户要在此特定 View 上删除和插入。我能够将记录插入 View 但不能从 View 中删除。你能指出下面这段 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 和 isShownIn 列。

最佳答案

MySQL 文档指出:

"For a view to be updatable, there must be a one-to-one relationship between the rows in the view and the rows in the underlying table."

MySQL 正在按设计运行,并防止您在这里搬起石头砸自己的脚。本质上,将从您的 View 中删除的行数与将从基础表中删除的行数不匹配。另外,要删除照片、外貌、人物还是摄影师?还是全部?或者只是其中的一些? MySQL也不确定,所以不允许操作。

记住这一点,运行这个查询:

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

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

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

关于MySQL 错误 : 1395 Can not delete from join view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com