2012-02-15 18 views
2

複数のテーブルの結合によって生成されたビューからレコードを削除しようとしています。この特定のビューを削除して挿入する新しいユーザーがいます。レコードをビューに挿入できますが、ビューから削除することはできません。このSQL文の下でエラーを指摘してください。MySQLエラー:1395結合ビューから削除できません

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

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が設計どおり-行っており、ここで足に自分自身を撮影からあなたを妨げています。基本的に、ビューから削除される行の数は、基になる表から削除される行の数と一致しません。また、写真、外観、人物、写真家を削除しますか?またはそれらのすべて?またはそれらのいくつかだけ? MySQLはどちらもわからないので、操作を許可しません。で-心、このクエリを実行することをベアリング

:結果が「YES」以外であれば

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

することは、あなたはあなたのビューを再設計を検討する必要があります。もう1つのオプションは、基になるテーブルから直接削除することです。

また、 "WITH CHECK OPTION"節を使用して更新可能なビューを作成することをお勧めします。これにより、ビューのWHERE句で定義された条件を満たすものを除いて、基礎となる表に対するUPDATEまたはINSERTが防止されます。または、あなたの場合、フレッドがボブの写真を乱さないようにしてください。

関連する問題