转自 http://blog.sina.com.cn/s/blog_4f9fc6e10102w0um.html
1. 若视图是由两个以上基本表导出的,则此视图不允许更新。
2. 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。
3. 若视图的字段来自集函数,则此视图不允许更新。
4. 若视图定义中含有GROUP BY子句,则此视图不允许更新。
5. 若视图定义中含有DISTINCT短语,则此视图不允许更新。
6. 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。例如将成绩在平均成绩之上的元组定义成一个视图GOOD_SC: CREATE VIEW GOOD_SC AS SELECT Sno, Cno, Grade FROM SC WHERE Grade> (SELECT AVG(Grade) FROM SC); 导出视图GOOD_SC的基本表是SC,内层查询中涉及的表也是SC,所以视图GOOD_SC是不允许更新的。
7. 一个不允许更新的视图上定义的视图也不允许更新。
我自己用mysql测试过,条件一在一定情况下也可以更新,即是可能视图涉及多个表,也可以更新。
本文探讨了SQL视图的更新限制,包括视图由多个表导出、字段来自字段表达式或常数、涉及集函数、包含GROUP BY子句、使用DISTINCT短语、嵌套查询以及内层查询涉及的表也是导出该视图的基本表的情况。并通过MySQL测试验证了特定条件下视图仍可能被更新。
994

被折叠的 条评论
为什么被折叠?



