mysql 视图sql_SQL的视图

1、什么是视图

视图是虚拟的表,是一个存储的查询,虽然不需要实际的物理存储,但是也被看作是一个数据库对象;它与包含数据的表不一样,它不包含任何列或数据,它只是包含使用时动态检索数据的查询,并且只包含一个SELECT语句(不限制子查询)。视图实际上是由预定义查询形式的表所组成的。

视图与表之间的主要区别在于:表占据物理空间,包含实际的饿数据;而视图不需要物理空间,不包含数据,它只是从表里引用数据。

视图只保存在内存里,而且只需要保存其定义本身(查询语句),也就是说视图所需的空间只是定义语句所需要的。

2、视图的用途

(1)简化数据访问,简化复杂的SQL,对数据库里的数据进行归一化处理,达到重用SQL语句;

(2)对数据进行保护,起到安全的作用,例如只让用户访问部分字段信息;

(3)维护摘要数据;

(4)更改数据格式和表示,视图仅仅是用来查看存储在别处数据的一种设施。

3、视图的使用

在数据库里,视图的使用方式与表是一样的;当创建一个视图时,实际上是在数据库里执行了一个SELECT语句。

(1)表创建视图

CREATE VIEW view_name AS

SELECT *

FROMtable_name[WHERE exp1]

[WITH CHECK OPTION]

[GROUP BY]

WITH CHECK OPTION选项的目的是确保全部的UPDATE和INSERT语句满足视图定义里的WHERE条件子句,这样保证了引用的完整性。WITH CHECK OPTION有两个选项,CASCADED和LOCAL,其中CASCADED是默认选项。这两个属性都会检查视图的完整性约束和新视图的定义条件,但是LOCAL不检查底层的表,而CASCADED会检查。所以,现对于来说CASCADED更安全些。

(2)视图创建视图

CREATE view2 AS

SELECT * FROM view1;

如果从基表和从另一个视图创建视图具有一样的难度和效率,那么首选从基表创建视图。

(3)视图创建表

CREATE TABLE table_name AS

SELECTcol1,col2FROM view_name;

(4)删除视图

DROP VIEW view_name;

(5)更改视图

虽然ANSI SQL不包含ALTER VIEW语句,但是某些实现也会支持它,例如:MySQL\SQL Server\Oracle,在MySQL的旧版本中还可以通过REPLACE VIEW来修改视图。

(6)使用视图

通过视图来检索数据的时候,若是该条检索语句存在WHERE子句,并且视图定义中也存在WHERE子句,那么前一个WHERE子句会被添加到视图查询中已有的WHERE子句中,以便正确过滤数据。也即是说,一个WHERE子句在视图定义中,另外一个WHERE子句在传递给视图的中,那么这两组WHERE子句会自动合并,并且会放置在视图定义中。

(7)嵌套视图对性能的影响

因为搜索引擎需要分析每一层的视图,所以若视图嵌套的层数越多,那么搜索引擎需要进行更多的分析工作,这样导致性能降低,故最好控制视图的嵌套层数。实际上,大多数搜索引擎无法 确保获得一个完美的执行计划,而只能保证执行一个耗时最短的计划。

4、视图的规则

(1)视图名必须唯一,并在只能创建不存在的视图,视图数目没有限制;

(2)视图可以嵌套,但是要注意性能问题;

(3)视图不能有索引,也不能有关联的触发器或默认值;

(4)有些DBMS禁止在视图中使用ORDER BY子句;

(5)有些DBMS把视图作为只读的查询,禁止将数据写会底层表;

(6)有些DBMS要求返回的列进行命名,若是计算字段的话,那么必须要使用别名;

(7)有些DBMS可以创建这样的视图,即不能进行导致行不再属于视图的插入或更新;

(8)视图权限:

创建视图必须要有足够的权限;

视图由创建者或规划所有者所拥有,视图所有者自动拥有视图的全部权限,并且可以把视图的权限授予其他用户;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值