MYSQL中的视图

来源:互联网 发布:机械工艺设计软件 编辑:程序博客网 时间:2024/06/05 20:57

图 | 自制

文 | 挨踢小子

——此文仅代表个人学习所得,欢迎阅览

如有侵权,请私信删除


视图概述:

视图是从一个或者多个表中导出的,视图的行为与表非常相似,但视图是一个虚拟表,在视图中,用户可以使用,select语句查询数据,以及使用insertupdate 、和delete修改记录。从mysql5.0开始可以使用视图,视图可以使用户操作方便,而且保障数据库系统的安全。

含义:

视图是一个虚拟表,是从数据库中一个或者多个表中导出来的表,视图还可以从已经存在的视图的基础上定义。

视图一经定义,便存储在数据库中,与其相对应的数据并没有像表那样在数据库中在存储一份,通过视图看到的数据只是存放在基本表中的数据,对视图的操作与对表的操作一样,可以对其进行查询、修改、和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。

视图作用与直接从数据表中读取相比,视图有以下优点:

1、简单化

看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他 们的操作,那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2、安全性

通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据则既看不到也取不到。数据库授权命令,可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定列上。通过视图,用户可以被限制在数据的不同子集上;

1、  使用权限可被限制在基表的行的子集上。

2、  使用权限可被限制在基表的列的子集上。

3、  使用权限可被限制在基表的行和列的子集上。

4、  使用权限可被限制在多个基表的列链接所限定的行上。

5、  使用权限可被限制在基表的数据的统计汇总上。

6、  使用权限可被限制在另一个视图的一个子集上,或是一些视图和基表合并后的子集上。

3、逻辑数据独立性

视图可帮助用户屏蔽真实表结构变化带来的影响

创建视图:

视图中包含了select  查询的结果,因此视图的创建基于select  语句和已经存在的数据表,视图可以建立在一张表上,也可以建立在多张表上。

基本语法:

CREATE  [OR REPLACE]   [ALGORITHM={UNDEFINED | MERGE |TEMPTABLE}]

VIEW   view_name   [column_list]

 as   SELECT_statement 

[WITH  [CASCADE |LOCAL ] CHECK  OPTION]

其中,

CREATE          表示创建新的视图;

PEPLACE       表示替换已经创建的视图,

ALGORITHM    表示视图选择的算法;

view_name         为视图的名字,

column_list        为属性的列;

SELECT_staement表示select语句;

[WITH  [CASCADE |LOCAL ] CHECK  OPTION] 参数表示视图在更新时保证在视图的权限范围之内。

ALGORITHM 的取值有3个,分别是{UNDEFINED | MERGE |TEMPTABLE} 

UNDEFINED 表示mysql将自动选择算法。

MERGE表示将使用的视图语句与视图定义合并起来,使得视图定义的某部分取代语句对应的部分。

EMPTABLE  表示将视图的结果存入临时表,然后用临时表来执行语句[CASCADE|LOCAL ]为可选参数,CASCADE 为默认值,表示更新视图时要满足所有相关的视图和表的条件,LOCAL表示更新视图时满足该视图本身定义的条件即可。

该语句要求具有针对视图的create view 权限,以及针对由select  语句选择的每一列上的某些权限。对于在select 语句中其他地方使用的列,必须具有select 权限。如果还有OR REPLACE子句,必须在视图上具有 DROP 权限。

视图属于数据库,在默认情况下,将在当前的数据库创建新视图。要想在给定数据库中明确创建视图,创建时应将名称指定为db_name.view_name。

在单表上创建视图

Mysql可以在单个数据表上创建视图

在t表上创建一个名为view_t的视图

首先创建基本表并插入数据,语句如下:

Create  table  t  (quantity  int , price  int);

Insert  into t values(3,50)

创建视图语句为:

Create  view  view_t  as  select quantity ,  

price , quantity *price from t;

默认情况下创建的视图和基本表的字段时一样的,也可以通过指定视图字段,名称来创建视图。

Create  view  view_t(qty, price , total) as select  quantity , price  , quantity *price  from  t;

在多表上创建视图

Mysql可以在多个数据表上创建视图,可以使用CREATE VIEW 语句实现。

在表student和表stu_info上创建视图stu_glass

创建视图stu_glass,语句如下:

Create  view stu_glass (id,name,glass)  as

Select  student.s_id , student.name  ,   stu_info.glass

from   student ,stu_info 

where  student.s_id=stu_info.s_id;

●作者简介:挨踢小子,现在就读于某某大学,一个一无所有,努力拼搏不负青春的小子,喜欢文字,爱好读书。公众号:  挨踢小子(LN-aitixiaozi )。

原创粉丝点击