MySQL视图

 视图:

视图的概念:视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的

数据库中只存放了视图的定义,并没有存放视图中的数据

真实表中的数据发生改变,显示在视图中的数据也会发生改变

视图并不同于数据表,它们的区别在于以下几点:

  • 视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。
  • 存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。
  • 视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。
  • 视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。
  • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。
  • 视图的建立和删除只影响视图本身,不影响对应的基本表。

视图的作用:

  1. 视图能够简化用户的操作
  2. 视图使用户以多种角度看待同一数据
  3. 视图对重构数据库提供了一定程度的逻辑独立性
  4. 视图能够对机密数据提供保护
  5. 适当的利用视图可以更清晰的表达查询

视图的缺点:

并不提升查询速度,提高了维护成本 

注意事项:

  • 创建视图需要足够的访问权限。
  • 创建视图的数目没有限制。
  • 视图可以嵌套,即从其他视图中检索数据的查询来创建视图。
  • 视图不能索引,也不能有关联的触发器、默认值或规则。
  • 视图可以和表一起使用。

创建视图:

create view   视图名

as

查询语句

【with check option】修改视图时,检查插入的数据是否符合 WHERE 设置的条件。

create view  V
as
select *
from student join student1
on student.name=student1.name
where age>15

修改视图:

方法一:

create   or  replace  view  视图名

as

新的查询

方法二:

alter  view  视图名 

as

新的查询

--创建视图
create  view  p1
as
select  * 
from student

--修改视图1
create or replace view p1
as
select id,name
from student

--修改视图2
alter view p1
as
select id,name,age
from student

 查看视图:

desc        视图名

describe  视图名

删除视图:

drop view 视图名,.....

视图的更新:

视图是一个虚拟表,实际的数据来自于基本表,所以通过插入、修改和删除操作更新视图中的数据,实质上是在更新视图所引用的基本表的数据。

注意:对视图的修改就是对基本表的修改,因此在修改时,要满足基本表的数据定义。

还有一些特定的其他结构,这些结构会使得视图不可更新。更具体地讲,如果视图包含以下结构中的任何一种,它就是不可更新的:

  • 聚合函数 。
  • distinct   关键字。
  • group by  子句。
  • having  子句。
  • union 或 union all 运算符。
  • 位于选择列表中的子查询。
  • 常量视图
  • from 子句中的不可更新视图或包含多个表。
  • where 子句中的子查询,引用 from 子句中的表。
  • algorithm 选项为 temptable(使用临时表总会使视图成为不可更新的)的时候。

你可能感兴趣的