搞定这些问题,你就搞定了MySQL的视图

  • Post author:
  • Post category:mysql




问题陈列

1、视图的定义是什么?

2、创建视图的语法是什么?能否根据现有视图生成新的视图?

3、修改视图的语法

4、删除视图的语法

5、怎样为视图设置检查选项?视图检查选项有哪几种?默认是哪一种?这几种有什么区别?

6、基于单表生成的视图中,能否进行insert、update、delete操作?哪些可以?哪些不可以?

7、基于多表生成的视图中,能否进行insert、update、delete操作?

8、视图的作用是什么?

9、其它问题:

(1)视图可以加索引吗?

(2)如果生成视图的基表发生了结构变化,例如字段改变,视图会随之改变吗?



问题1 视图的定义


视图的定义是什么?


简单来讲,视图就是一个虚表,它里面行和列存储的数据都对应数据库中的一个表或多个表。



问题2 创建视图


创建视图的语法是什么?能否根据现有视图生成新的视图?


创建视图的语法:

create view [视图名称] as [select查询语句] ;

举例:

create view v1 as select id,name from user;

可以根据现有视图生成新的视图。

create view v1 as select id,name from user;
create view v2 as select name from v1;



问题3 修改视图


修改视图的语法

alter view [视图名称] as [select查询语句] ;



问题4 删除视图

drop view  if exists [视图名称] ;

注:if exists 可以省略



问题5 视图与检查选项


怎样为视图设置检查选项?视图检查选项有哪几种?默认是哪一种?这几种有什么区别?


(1)创建视图时在后面添加with cascaded check option或者with local check option;

(2)两种。

(3)默认是with cascaded check option。

(4)区别:

想创建两个视图,一个是v1,一个是v2,v2基于v1生成。

create view v1 as select id,name from student where id<=10;

create view v2 as select id,name from v1 where id>=5 ;


当检查选项为cascaded时



create view v1 as select id,name from student where id<=10;

create view v2 as select id,name from v1 where id>=5 with cascaded check option;

当在v2插入数据时,插入的数据id必须在5-10之间。


当检查选项为local时



create view v1 as select id,name from student where id<=10;

create view v2 as select id,name from v1 where id>=5 with local check option;

当在v2插入数据时,插入的数据id>=5即可。


说明


cascaded级别,在v2进行数据操作,必须要满足v1的条件,无论v1有没有设置检查选项;

local级别,在v2进行数据操作,如果v1设置了检查选项,则满足v1的条件,如果v1设置没有,则忽略v1的条件。



问题6 单表视图与增删改操作


基于单表生成的视图中,能否进行insert、update、delete操作?哪些可以?哪些不可以?


可以进行insert、update、delete操作。

当生成视图的SQL语句中存在以下任意一个条件时,都不可以:

(1)聚合函数

(2)distinct

(3)group by

(4)having

(5)union 和 union all



问题7 多表视图与增删改操作


基于多表生成的视图中,能否进行insert、update、delete操作?


可以进行update操作,不可以进行insert和delete操作。

当生成视图的SQL语句中存在以下任意一个条件时,都不可以:

(1)聚合函数

(2)distinct

(3)group by

(4)having

(5)union 和 union all



问题8 视图的作用

(1)简单

看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

(2)安全

过视图用户只能查询和修改他们所能见到的数据。但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:

使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

(3)数据独立

视图可帮助用户屏蔽真实表结构变化带来的影响。



其它问题

(1)视图可以加索引吗?

不可以。因为视图是一张虚表。

(2)如果生成视图的基表发生了结构变化,例如字段改变,视图会随之改变吗?

视图会随之改变。因为视图中的数据是基表中的映射。



版权声明:本文为hypertext123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。