搞定这些问题,你就搞定了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)如果生成视图的基表发生了结构变化,例如字段改变,视图会随之改变吗?
视图会随之改变。因为视图中的数据是基表中的映射。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香鱼嫩虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值