1)若视图是由两个以上基本表导出的,则此视图不允许更新。
2)若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行delete操作。
3)若视图的字段来自聚集函数,则此视图不允许更新
4)若视图定义中含有Group By子句,则此视图不允许更新
5)若视图定义中含有DISTINGCT短语,则此视图不允许更新
6)若视图定义中有嵌套查询,并且内层查询的from子句中设计的表也是导出该视图的基本表,则此视图不允许更新。例如,将SC中成绩在平均成绩之上的元组定义成一个视图GOOD_SC:
CREATE VIEW GOOD_SC
AS
SELECT Sno,Cno,Grade
FROM SC
WHERE Grade >
(
SELECT AVG(Grade)
FROM SC
);
不允许更新
7)一个不允许更新的视图也是不允许更新。
另外:适当的利用视图可以更加清晰的表达查询
例如经常需要执行“对每个学生找出他获得最高成绩的课程号”,可以先定义一个视图,求出每个学生最高成绩:
CERATE VIEW VMGRADE
AS
SELECT Sno,MAX(Grade) Mgrade
FROM SC
GROUP BY Sno
然后用如下的查询语句完成查询:
SELECT SC.Sno,Cno
FROM SC,VMGRADE
WHERE SC.Sno = VMGRADE.Sno AND SC.Grade = VMGRADE.Mgrade;
这样子查询变的好简单了