数据库视图的使用和原理

视图的概述

视图是一个虚拟表,其查询的数据来自于视图定义时的 as select xx 查询语句。视图的列来自于一个表或多个表,所以视图不可以和表名重名。
数据多用作查询,一般不会通过视图去修改数据。

视图的作用

1.视图能简化用户的操作
我们可以为常用的sql语句创建一个视图,这样我们原来需要连多个表,现在操作一个表就好了。

2.视图能够增加安全性
我们可以给不同的用户定义不同的视图,屏蔽了底层的表结构,从而更好的保护了数据的安全性。降低了如sql注入的风险。

3视图对重构数据库提供了一定程度的逻辑独立性
数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。

视图的创建

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

column_list子句,列出由逗号隔开的ID。column_list中的名称数目必须等于SELECT语句检索的列数。

ALGORITHM可取三个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。
MERGE:直接合并结果集
TEMPTABLE:创建临时表
UNDEFINED:MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

WITH CHECK OPTION子句中,LOCAL和CASCADED关键字决定了检查测试的范围。LOCAL关键字对CHECK OPTION进行了限制,使其仅作用在定义的视图上,而CASCADED会嵌套的检查前面的视图,如果未给定任一关键字,默认值为CASCADED
在这里插入图片描述
如果去除option则可以更新,
使用with check 必须保证更新之后的数据,依旧符合where 条件,能被检索出来。

视图的更新操作限制

视图一般只用来查询,如果是单表的话,也可以进行增删改。但是有如下限制。
1.聚合函数(SUM(), MIN(), MAX(), COUNT()等)。2 2.DISTINCT
3. GROUP BY
4. 4 HAVING
5. UNION或UNION ALL
6. 位于选择列表中的子查询
7.Join
8.FROM子句中的不可更新视图
9. WHERE子句中的子查询,引用FROM子句中的表。
10. 仅引用文字值(在该情况下,没有要更新的基本表)。
11. ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值