一、视图概念
视图可以看成是一个窗口,它所反映的是一个表或若干表的局部数据。视图一经定义,用户就可以把它当作表一样来查询数据。
同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
视图和基本表不同,视图是一个虚表,即视图储存的是查询语句而不是查询结果。
二、视图的基本使用
1、创建视图
常使用的语句为:
create view 视图名 as select语句;
例子:
建立计算机系学生的视图view_cs:
create view view_cs
as
select * from student where dept='计算机';
下面是具体的参数说明:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
参数说明:
-
OR REPLACE
:表示替换已有视图; -
ALGORITHM
:表示视图选择算法,默认算法是UNDEFINED
(未定义的):MySQL
自动选择要使用的算法 ;merge
合并;temptable
临时表; -
column_list
:可选参数,指定视图中各个属性的名词,默认情况下与select
语句中查询的属性相同; -
select_statement
:表示select
语句; -
[WITH [CASCADED | LOCAL] CHECK OPTION]
:表示视图在更新时保证在视图的权限范围之内;cascade
是默认值,表示更新视图的时候,要满足视图和表的相关条件;local
表示更新视图的时候,要满足该视图定义的一个条件即可。
对于 with check option 在下面的场景中需要使用到:
建立通信工程系学生的视图view_ce,并要求进行修改和插入操作时仍需保证该视图只有通信工程系的学生:
create view view_ce
as
select * from student where dept='通信工程'
with check option;
对于这个视图,如果在向这个视图插入非通信工程学生的信息时,会直接报错,不能插入成功。
2、修改视图
1)修改视图结构
-
create or replace view 视图名 as select语句
CREATE OR REPLACE
VIEW view_name [{column_list}]
AS SELECT_STATEMENT
WITH CHECK OPTION
释义: CREATE OR REPLACE : 【创建或替换已创建的】视图 view_name : 视图名称; column_list : 属性列; SELECT_STATEMENT :SELECT语句; WITH CHECK OPTION 表示视图在更新时保证在视图的权限范围内。
-
alter view 视图名 as select语句
2)修改视图内容
当对视图中的数据进行增加、删除和修改操作时,基本表中的数据会相应地发生变化;
要使视图可更新,视图中的行和列与底层基本表之间必须存在一对一的关系,行列子集视图是可更新的;
在定义视图时,如果SELECT语句后的字段列表中使用DISTINCT、聚合函数、子查询中有GROUP BY、HAVING、UNION短语等,视图不支持数据更新的,因为不满足 视图中的列与基表中的列 一一对应的关系了,如:视图在定义时,使用了avg对基本成绩表做平均成绩的统计,这样视图函数平均成绩这一列,而基本表中不含有。
注意: 视图一般用来简化查询工作, 尽量不用视图做数据更新操作
- 使用 insert 语句插入一条数据
insert into 视图名
values('001301','李小荣','通信工程','女','2004-4-3',0,NULL);
- 使用 update 更新数据
update 视图名 set name='TEST' where name='CLARK';
三、视图 "周边"
1、视图规则和限制
1)与表一样,必须唯一命名(不能出现同名视图或表名)
2)创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
3)视图不能添加索引,也不能有关联的触发器或者默认值
4)视图可以提高安全性,必须具有足够的访问权限
5)order by 可以用在视图中,但是如果从该视图检索数据select 中也含有order by ,那么该视图
中的order by 将被覆盖
6)视图可以和表一起使用
2、视图的优点
- 操作简单
- 减少数据冗余
- 数据安全
- 适应灵活多变的需求
- 能够分解复杂的查询逻辑
3、有关视图的概念题
今天的分享就到这里了,如果,你感觉这篇博客对你有帮助的话,就点个赞吧!感谢感谢……