视图的概念
视图就是一张虚拟的表。视图在外观和行为上都类似于表,但它不需要实际的物理存储。
当创建一个视图时,实际上是在数据库里执行了一个select语句。
警告:如果用于创建视图的表被删除了,那么这个视图就不可访问了。如果对这个视图做查询,就会收到错误信息。
创建视图
create view view_name
as
sql_sentence
执行语句 select * from view_name
With Check Option
这是Create View语句里的一个选项,其目的是确保全部的Update和Insert语句满足视图定义里的条件。
例如:
create view view_score
as
select sid,fid,score from score
where
fid
is
not
null
with check option
在这个范例里,with check option确保了fid里的数不能为null。
当插入数据:insert into view_score values(null,59),系统会提示错误。
警告:在基于视图创建另一个视图时,with check option有两个选项:cascaded和local,其中cascaded是默认选项。在对基表进行更新时,cascade
选项会检查所有底层视图,所有完整性约束,以及新视图的定义条件。local选项只检查两个视图的完整性约束和新视图的定义条件,不检查底层的表。因
此,使用cascade选项创建视图是更安全的做法,基表的引用完整性也得到了保护。
删除视图drop view view_name
它有两个选项:restrict和cascade;如果使用了restrict选项进行删除操作,而其他视图在约束里有所引用,删除操作就会出错。
如果使用了cascade选项,而且其他视图或约束被引用了,drop view也会成功,而且底层的视图或数据也会被删除。
警告:在使用cascade选项时小心,避免重要的视图被意外的删除。
视图的注意事项:
在一定条件下,视图的底层数据可以进行更新:
视图不包括结合;
视图不包括Group By子句;
视图不包括Union语句;
视图不包含对伪字段RowNum的任何引用;
视图不包含任何组函数;
不能使用Distinct子句;
Where子句包含的嵌套的表表达式不能与From子句引用同一个表。