mysql view视图

一、视图的作用
(1).简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
(2).安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:使用权限可被限制在基表的行的子集上。

    使用权限可被限制在基表的列的子集上。
    使用权限可被限制在基表的行和列的子集上。
    使用权限可被限制在多个基表的连接所限定的行上。
    使用权限可被限制在基表中的数据的统计汇总上。
    使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
    逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。
二、视图的优点
    (1)视图能简化用户的操作
    (2)视图机制可以使用户以不同的方式查询同一数据
    (3)视图对数据库重构提供了一定程度的逻辑独立性
    (4)视图可以对机密的数据提供安全保护
三、视图的安全性
视图的安全性可以防止未授权用户查看特定的行或列,是用户只能看到表中特定行的方法如下:

    1 在表中增加一个标志用户名的列;
    2 建立视图,是用户只能看到标有自己用户名的行;
    3 把视图授权给其他用户。

四、逻辑数据独立性

视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

修改视图需要create view 和 delete 权限。
表和视图的命令在同一个命名空间中,所以同一个数据库不能有表名和视图名重复。
可以对其他数据库中的表建视图
视图的定义有以下的限制:
1、from子句中不能有子查询
2、select不能指向系统或者用户的变量
3、select不能指向prepared语法参数
4、定义中的表或视图必须存在
5、不能对临时表建视图,也不能建临时视图
6、视图定义中的表名必须已经存在
7、不能在触发器和视图之间建关联

ORDER BY可以用在视图定义中,但是如果访问视图的select中使用的order by,则视图定义中的ORDER BY被忽略。
语法:
[code]CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION][/code]
ALGORITHM扩展了标准sql,有三个值,默认值是UNDEFINED,预算法则决定了mysql如何处理视图。
对于临时表方式,会将视图的结果放置到临时表中,然后使用临时表执行sql,这样的好处是在临时表建完之后,就会释放在原表上面的锁,这样比MERGE方式更快的释放在访问的表上的锁。
对于UNDEFINED方式,是指有系统自己决定使用临时表方式还是MERGE方式,MERGER方式更高效,且临时表方式不能更新视图的数据。
对于MERGE方式,实际上是把访问视图的SQL拼接到视图本身的sql上面。要求视图的行和表的行之间是一一对应的,如果不存在
这样的一一对应的关系,则会切换到临时表算法。
包含以下关键字的sql,不能使用merge方式:
聚合函数(sum,min,max,count等等)
distinct
group by
having
union或者union all
常量视图
另外,这些视图的纪录也是不能更新和删除的,不能更新和删除纪录的视图除了以上那些情况外,还包括:
select中包含子查询
join
from一个不能更新的视图
from一个表的子查询
算法是临时表的视图
如果视图还想要可以插入纪录,则必须满足以下条件:
视图必须包含基表没有默认值的所有字段
视图列必须是简单的对应表的列,没有在上面进一步的处理。
多于多表视图的可更新性:
首先必须是基于MERGE算法的
表连接必须是内连接
视图中只有一个单表是可以被更新的。
对于多表可更新视图,如果插入其中一个单表是可以的,删除纪录是不允许的
WITH [CASCADED | LOCAL] CHECK OPTION决定了是否允许更新数据使纪录不再满足视图的条件。
这个选项和oracle是类似的
local是只要满足本视图的条件就ok
cascade则是必须满足所有针对该表的所有视图的条件才ok。
如果没有明确是local还是cascade,则默认是cascade。

删除视图:
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
显示视图内容:
SHOW CREATE VIEW view_name

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值