MYSQL-----视图

视图
视图是从一个或者多个表中导出来的表,是一种虚拟存在的表,视图就像一个窗口,通过这个窗口可以看到对自己有用的数据。使用户的操作更方便,保证了数据库的安全性。

视图依赖原来表中的数据,一但之前表中的数据发生改变,显示在视图中的数据也会发生变化。

如果需要经常从多个表中查询指定字段的信息,通过视图可以显示这些字段的数据。

1.创建视图
创建视图是在数据库的表上创建视图,视图可以创建在一张表上也可以创建在多张表上。

ALOGORITHM是可选参数,表示视图选择的算法。
ALOGORITHM包括三个选项:
1) undefined,表示MYSQl将自动选择要使用的算法。
2)merge。表示将使用视图的语句和视图的定义结合起来,使得视图定义的某一部分取代语句中的对应部分,
3) temptable。表示将视图的结果存入临时表,然后使用临时表执行语句。
with check option是可选参数,表示更新视图时,要在这个视图的权限范围内。

在使用create view 语句创建视图时,最好加上with check option 和cascaded,保证数据的安全性。

在创建视图时不仅要有create view 权限也应有select权限。
通过该语句来查询是否有相应权限:Select_priv Create_view_priv from mysql.user where user=’root’;
当查询的属性Select_priv和Create_view_priv的值为Y时,表示该属性有相应权限。

1)在单表上创建视图。

未指定属性列:create view view_name as select * from example0.在未指定属性列的时候,该视图包含example0表的所有列

指定属性列:create view view_name(id,name) as select id,name from example0.使用视图时,用户接触不到实际操作的表和字段,保证了数据的安全性。

2)在多表上创建视图,视图可以将多个表上的操作简洁地描述出来。
create algorithm=merge view view_name(id,name,sex,age) as select id,name,sex,age from example1,example2 where exampe1.id=example2.id with local check option;

3)查看视图

查看视图基本信息
1) decribe 或 desc 视图名;
2) show table status like ‘视图名’;该语句通常很少使用。显示的各个属性的值几乎都是NULL.
视图和普通表的区别就是视图的comment项没有信息、

查看视图所有详细信息

1) show create view 视图名;
2) 在view表中查看视图详细信息
select * from information_schema.views;
所有视图的定义都是存储在information_schema这个数据库下的view表中。也可在该表中查看视图的定义。
通常我们采用show create view 视图名;来查询详细信息。

4)修改视图

1)create or replace view
当视图不存在时,可以创建视图。不仅可以修改已存在的视图还可以创建新的视图。
create or replace algorithm=temptable view view_name(id_new,name_new) as select id,name from example3;

2)alter只能对已经存在的视图进行修改。
alter view view_name(id_new,name_new) as select id,name from example4;

5)更新视图。由于视图是一个虚拟表,因此对视图的更新都是转换到基本表上的。只能更新权限范围内的数据。

update view_name set id=1;

下面的这几种情况是不能更新视图的:
1)视图中包含 sum(),count(),max(),min();

2)视图中包含 union ,union all,distinct,group by,order by,having;

3)常量字段,比如视图某属性的值是一个常量字符串。

4)视图中的select包含子查询。

5)由不可更新的视图导出的视图。

6)创建视图时,algorithm=temptable;

7)视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。

8)with [cascade| local]check option.没有指明,默认为cascaded
local表示更新视图时满足视图本身定义的条件即可,
cascaded表示更新视图时要满足所有相关视图和表的条件。
总而言之,视图虽然可以更新表中的数据,但是有很多的限制。一般情况下,最好将视图作为查询的虚拟表。而不要通过视图更新数据。
因为若没有考虑到视图更新数据的限制,容易造成更新数据的失败。

6)删除视图

首先我们来查看,我们**是否有删除的权限:**select Drop_priv from mysql.user where user=’用户名’;当属性值为Y表示拥有该权限。

删除视图只会删除视图的定义,不会删除数据。

drop view [if exists] 视图名列表 [restrict| cascade];

if exists 判断该视图是否存在,存在执行,不存在就不执行。(为啥我在我的Linux数据库版本下删除一个不存在的视图只是一个警告,可能版本升级了吧)
视图名列表之间用逗号隔开。
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值