关于MYSQL 视图简单介绍

视图详解

从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。 视图是一个虚拟表,其内容由查询定义

1.视图概述

  1. 视图以经过定制的方式显示来自一个或多个表的数据
  2. 视图是一种数据库对象,用户可以象查询普通表一样查询视图
  3. 视图内其实没有存储任何数据,它只是对表的一个查询。
  4. 视图的定义保存在数据字典内。创建视图所基于的表为“基表”。
  5. 视图一经定义以后,就可以像表一样被查询、修改、删除和更新。

2.作用

简化数据查询语句
使用户能从多角度看到同一数据
提高了数据的安全性
提供了一定程度的逻辑独立性
减少带宽流量、优化后还可提高执行效率

3.优点

提供了另外一种级别的表安全性
隐藏的数据的复杂性
简化的用户的SQL命令
通过重命名列,从另一个角度提供数据

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

说明:

OR REPLACE:给定了OR REPLACE子句,语句能够替换已有的同名视图。
    ALGORITHM:可选的mysql算法扩展,算法会影响MySQL处理视图的方式。有以下三个值:
    UNDEFINED--MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的
    MERGE--会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
    TEMPTABLE--视图的结果将被置于临时表中,然后使用它执行语句。
veiw_name:视图名。
column_list:要想为视图的列定义明确的名称,列出由逗号隔开的列名。column_list中的名称数目必须等于SELECT语句检索的列数。若使用与源表或视图中相同的列名时可以省略column_list。
select_statement: 用来创建视图的SELECT语句,可在SELECT语句中查询多个表或视图。但对SELECT语句有以下的限制:
   1. 定义视图的用户必须对所参照的表或视图有查询(即可执行SELECT语句)权限;
   2. 在定义中引用的表或视图必须存在;
WITH [cascaded|local] CHECK OPTION: 
在关于可更新视图的WITH CHECK OPTION子句中,当视图是根据另一个视图定义的时,LOCALCASCADED关键字决定了检查测试的范围。
   LOCAL关键字对CHECK OPTION进行了限制,使其仅作用在定义的视图上,CASCADED会对将进行评估的基表进行检查。如果未给定任一关键字,默认值为CASCADEDWITH CHECK OPTION指出在可更新视图上所进行的修改都要符合select_statement所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。

4.限制

视图定义服从下述限制:

SELECT语句不能包含FROM子句中的子查询。
SELECT语句不能引用系统或用户变量。
SELECT语句不能引用预处理语句参数。
在存储子程序内,定义不能引用子程序参数或局部变量。
在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句。
在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图。
在视图定义中命名的表必须已存在。
不能将触发程序与视图关联在一起。

#示例1
create view teacher_view(姓名,工作时间,学历,职称)
as
select 姓名,工作时间,学历,职称 from 教师;
select * from teacher_view;

create view grade_view
as
select * from 选课成绩
where 成绩>90
select * from grade_view
#查看视图
desc  视图名称
show table status like '视图名称'
show create view  视图名称

#修改视图
alter view student_sc_view(学生编号,姓名,年龄,选修课程名,成绩)
as
select s.学生编号,姓名,年龄,课程名称,成绩
from 学生 s, 选课成绩 sc, 课程 c
where s.学生编号=sc.学生编号 and sc.课程编号 =c.课程编号 and 成绩>=95
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值