视图的学习总结

1.视图的简介

         mysql 支持两种表;基本表和视图,基本表都是使用create table语句创建的,并且是唯一的存储数据的表,而视图只是把基本表中的数据组织起来构成一个“虚拟”表的一种命令或者形式,之所以说“虚拟的”,就是因为只用当视图用于一条语句中的时候,他才能存在。mysql获取构成视图公式的命令,执行它,并且像一个真实的表那样显示给用户。

2.视图的创建

create view towns

select distinct town

from players

一个视图的内容并没有被存储,而是当视图被引用的时候派生了,这就是说嘛,根据定义,视图的内容和基本表的内容一样,对基本的表的更新,就可以再视图中立即看到,用户就不用担心视图内容的完整性,只要维护基本表的完整性。

注意:可以在一个视图公式中声明另一个视图,也就是说视图可以嵌套。

3.更新视图

如果视图中包含了with  check option 字句,使用update,insert和delete对视图做出的所用改变都将进行有效性的检查:

  1. 如果更新后的行属于视图的内容,那么一条update语句是正确的,
  2. 如果新行属于视图的内容,那么一条insert语句是正确的。
  3. 如果删除的行属于视图的内容,那么delete语句是正确的。

注意:前七个是适合更新的,

  1. 视图是可以嵌套的,那么with check option的检查在什么样的程度上执行,如果我们声明了 with cascaded check option 检查所有的视图,使用with local check option 只对将要
    更新的视图中的调节进行相关的检查,cascaded是默认的。
  2. select 字句不能包含distinct
  3. select字句不能包含聚合函数
  4. from字句不能包含多个表
  5. where字句不能包含一个关联的子查询
  6. select语句不能包含group by字句
  7. select语句不能包含order by字句
  8. select语句不能包含一个集合运算符
  9. 不能更新一个虚拟的列
  10. select字句必须包含from字句中指定的表中所有的列,但这些列不允许空值或者没有指定默认值

 

 

  1. 4.       删除视图

drop  view用来删除视图,通过使用drop view,引用了被删除的视图的所用的其他视图也会自动被删除,当删除一个基本表的时候,直接或者间接地定义在这表的所用的视图也被删除了。

例如: drop view towns

  1. 5.       视图的应用程序区域

视图可以用在各种应用程序中

5.1例程语句的简化

例如

select *

from playerno

where playerno in

(select playerno

from penalties

         )

and town=’straford’

select town,count(*)

from players

where playerno in

         ( select playerno

         from penalties

)

group br town

这两条都使用至少引发一次罚款的球员,因此,可以用一个视图来定义这条语句

create view pplayers as

select *

from playeron

where playerno in

         (select playerno

         from penalties)

这样都可以简化前面的语句了

5.2   select 语句的分部编写

例子:对于来自stratford中的每个球员,如果他曾经引发一次罚款,并且罚款额比那些2号球队打比赛的球员以及为一只first分级的球队打过一场比赛的球员的平均罚款要高的话,那么就获取他的名字和首字母

create view greater as

select distinct playerno

from penalties

where amount >

(select avg(amout)

from penalties

where  palayeron in

(select playerno

from matches

where teamno=2)

)

在创建一个视图。其中包括了那些为first分级的一支球队比赛过的所用球员

create view frist as

select distinct playerno

from match

where teamno in(

select teamno in

(select teamno

from teams

where divison=’first’))

 使用这两个视图,很轻松的回答了问题

select nam,initials

from players

where town=’stratford’

and playerno in(select playerno

from greater)

and playerno in

(select playerno

from  first)

5.3   数据的安全性

视图可以用来保护表的一部分

原文地址:https://www.cnblogs.com/hylaz/p/2756041.html