MySQL-视图

十三、视图

13.1 介绍

/*
视图(view)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图是动态生成的。

通俗地讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们再创建视图的时候,主要的工作就落在创建这条SQL查询语句上
*/

-- 创建视图
#create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]
create or replace view stu_v_1 as select id,name from student where id<=10;

-- 查询视图
#查看创建视图的语句:show create view 视图名称
show create view stu_v_1;
#查看视图数据:select * from 视图名称 [条件]
select * from stu_v_1;

-- 修改

#方式一:create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]
create or replace view stu_v_1 as select id,name,no from student where id<=10;

#方式二:alter view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]
alter view stu_v_1 as select id,name from student;

-- 方式一其实就是创建新的视图来替换掉原来的视图


-- 删除
#drop view [if exists] 视图名称[(列名列表)]
drop view if exists stu_v_1;

13.2 检查选项

/*
当使用with check option子句创建视图时,MySQL会检查正在更改的每一行,以使其符合视图的规定。

另外,MySQL允许基于一个视图创建新的视图,如果新创建的视图带了检查选项的话,就会保证对视图进行增加操作时,添加进来的数据是符合它所基于的视图的要求的。

MySQL还提供了两个选项:cascaded和local,默认为cascaded
*/

-- 创建视图,并带上检查选项
create or replace view stu_v_1 as select id,name from student where id<=10 with cascaded check option ;


select * from stu_v_1;

-- 可以添加成功
insert into stu_v_1 values (5,'胡桃');

-- 该句执行失败,因为20>10,不满足视图要求
insert into stu_v_1 values (20,'钟离');



-- 基于stu_v_1创建的新视图,并且带有检查选项
create or replace view stu_v_2 as select id,name from stu_v_1 where id>7 with cascaded check option;

-- 执行成功,因为id=8既满足id>7,也满足id<=10
insert into stu_v_2 values(8,'hutao');

-- 报错,因为id=5不满足id>7
insert into stu_v_2 values(5,'hutao');

-- 也报错
insert into stu_v_2 values(11,'hutao');




-- 对于local,它会递归地检查SQL语句中包含的检查选项,如果修改的数据不满足选项的条件,则无法执行修改语句。所谓递归就是表的套娃,基于视图又创建视图。

13.3 视图更新

/*
要使视图可以更新,必须使视图中的行与基础表中的行之间
存在一对一的关系。
如果视图包含以下任何一项,则视图不可更新:
1.聚合函数或者窗口函数
2.distinct
3.group by
4.having
5.union或者union all
*/

13.4 视图的作用

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

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

数据独立:
视图可帮助用户屏蔽真实表结构变化带来的影响
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值