1.视图是从一个或者是多个表中导出,是有个虚拟表,视图包含一系列带有名称的行和列数据。行和列数据来自自由定义视图查询所引用的表,并且在引用视图是动态的生成。
2.视图还可以从已经存在的视图技基础上进行定义。
3.视图提供了有个很好的解决方法,创建视图的信息来自表的部分信息,只取需要的信息。
4.视图与表的区别:
(1)视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。
(2)视图没有实际的物理记录,而表有;
(3)表是内容,视图是窗口。
(4)表占用物理空间而视图不占用物理空间,视图知识逻辑概念的存在,表可以及时对它进行修改,但视图只能用创建的语句进行修改;
(5)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度来讲,视图可以防止用户接触数据表,因而用户不知道表结构。
(6)表属于全局模式中的表,是实表。
(7)视图的创建和删除知识影响视图的本身,不影响对应的基本表。
5.创建视图
(1)基本语法
create [or replace] [algorithm = {undifined|merge|temptable}] view view_name {column_list} as select_statement [with {cascade|local|check option}]
说明:create 表示创建新的视图,replace表示替换已创建的视图;algorithm表示视图选择的算法,view_name表示视图的名称,column_list表示为属性列,select_statement表示select语句;
algorithm的取值有三个:分别是undofined,merge,temptanle,undifined表示MySQL将自动的选择算法,merge表示将使用的视图定义合并起来,是的视图定义的某一部分取代语句对应的部分,temptable表示将视图的结果存入到临时表中,然后使用临时表来执行语句。
cascaded与local为可选参数,cascaded文默认值,表示更新试图使需要满足所有相关视图和表条件;local表示更新视图时满足该视图本身定义的条件即可;
视图属于数据,在默认的情况下,将在当前数据库创建新视图。
(2)在单表上创建视图
create table test(id int(11),name varchar(50));//创建数据库表
insert into test(id,name) values(1,"sdc");//插入数据
desc test;//查看表结构
create view view_test as select * from test;//创建视图
(3)在多表上创建视图
create view view_info (id,name,glass)
as select student.id,studeng.name,teacher.name
from student,teacher where student.id=teacher.id;
说明:在多个表中进行视图创建的时候,我们首先要明确两个表之间的关系,也就是说我们需要使用到我们的内连接查询和外链接查询(左、右连接查询);
(4)查看视图
<1>desc 视图名称
<2>查看视图基本信息
show create view like+“”+\G;
<3>在视图表中查看视图定义的详细信息
select *from 视图名称\G;
(5)修改视图
create view or replace view 修改视图名称;
alter view 视图名称 as sql_statement语句;
(6)更新视图
update 视图名称 set 参数列表;