数据库的视图
视图(view)
视图:视图主要体现在供用户查看,至数据的存储与视图无关。
视图就是存储sql语句。
MySQL视图就是一种虚拟表,实际数据的存储是产生视图的sql语句的基表中。
对基本中数据的更新,会即时返回到视图。
创建视图:
create view 视图名 as select语句;
示例:
create view vw as select * from stu;
查看视图:
视图也是一种表,
show tables、show create table、show create view、desc、show columns from
修改视图
语法:
alter view 视图名(字段列表) as sql语句;
视图操作
单表视图:产生视图的sql语句,只用到了一个表
多表视图:产生视图的sql语句,用到了多张表。
对于单表视图,可以执行新增、修改、删除操作。
示例:
多表视图:
创建多表视图:
create view vw1 as select stu.id,s_num,s_name,sex,c_id,c_name,room from stu,class where stu.c_id=class.id;
错误:
示例:
多表视图的操作:
注意:
创建多表视图,如果出现字段同名,
create view vw2 as select stu.id s_id,class.id c_id from stu,class where stu.c_id=class.id;
视图的删除
drop view 视图名;
视图算法
视图也有算法,由于视图是由SQL语句产生的一表,查询视图时还会使用SQL。涉及两个SQL语句。SQL语句中的五子句会有执行顺序的问题。
查看算法:
show create table 视图名;
示例:
MySQL中视图算法分三种:
undefined (缺省)由MySQL自已决定使用是merge算法还是temptable,为了效率,大多数时,是选择merge算法。
merge 将产生视图的sql语句与查询视图的sql语句进行合并,再一次执行。只执行一次SQL操作
temptable 先执行产生视图的SQL语句,再执行查询视图的SQL语句。执行两次SQL操作。
示例:
1、创建视图
2、为演示不同创建一个实体表
3、对实体表执行分组操作
示例:
4、对视图进行相同的操作
原因是,视图使用的merge算法。
创建视图的语句:
create view vw3 as select * from stu order by age desc;
查询视图的语句:
select * from vw3 group by c_id;
两条sql需要先进行合并再执行。
select * from stu group by c_id order by age desc;
\
5、更改视图算法。
6、执行查询操作
提示:
一般不需要考虑视图算法,但是当视图的创建sql与视图的查询sql的五子句在执行顺序上有先后问题时,才考虑算法法问题。