1.视图的简介
mysql 支持两种表;基本表和视图,基本表都是使用create table语句创建的,并且是唯一的存储数据的表,而视图只是把基本表中的数据组织起来构成一个“虚拟”表的一种命令或者形式,之所以说“虚拟的”,就是因为只用当视图用于一条语句中的时候,他才能存在。mysql获取构成视图公式的命令,执行它,并且像一个真实的表那样显示给用户。
2.视图的创建
create view towns
select distinct town
from players
一个视图的内容并没有被存储,而是当视图被引用的时候派生了,这就是说嘛,根据定义,视图的内容和基本表的内容一样,对基本的表的更新,就可以再视图中立即看到,用户就不用担心视图内容的完整性,只要维护基本表的完整性。
注意:可以在一个视图公式中声明另一个视图,也就是说视图可以嵌套。
3.更新视图
如果视图中包含了with check option 字句,使用update,insert和delete对视图做出的所用改变都将进行有效性的检查:
- 如果更新后的行属于视图的内容,那么一条update语句是正确的,
- 如果新行属于视图的内容,那么一条insert语句是正确的。
- 如果删除的行属于视图的内容,那么delete语句是正确的。
注意:前七个是适合更新的,
- 视图是可以嵌套的,那么with check option的检查在什么样的程度上执行,如果我们声明了 with cascaded check option 检查所有的视图,使用with local check option 只对将要 更新的视图中的调节进行相关的检查,cascaded是默认的。
- select 字句不能包含distinct
- select字句不能包含聚合函数
- from字句不能包含多个表
- where字句不能包含一个关联的子查询
- select语句不能包含group by字句
- select语句不能包含order by字句
- select语句不能包含一个集合运算符
- 不能更新一个虚拟的列
- select字句必须包含from字句中指定的表中所有的列,但这些列不允许空值或者没有指定默认值
- 4. 删除视图
drop view用来删除视图,通过使用drop view,引用了被删除的视图的所用的其他视图也会自动被删除,当删除一个基本表的时候,直接或者间接地定义在这表的所用的视图也被删除了。
例如: drop view towns
- 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 数据的安全性
视图可以用来保护表的一部分