MySQL视图的概念与实际应用 |
本文标签:MySQL视图 以下的文章主要是对MySQL视图的描述,其中包括MySQ视图L概述,以及创建MySQL视图—create view与修改MySQL视图——alter view等相关内容的具体描述,以下就是文章的具体内容介绍 。 一. 视图概述 MySQL视图是一个虚拟表,其内容由查询定义 。同真实的表一样,视图包含一系列带有名称的列和行数据 。但是,视图并不在数据库中以存储的数据值集形式存在 。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成 。 对其中所引用的基础表来说,MySQL视图的作用类似于筛选 。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图 。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少 。 视图是存储在数据库中的查询的sql 语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用 。
MySQL视图:查看图形或文档的方式 。
视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的 。和表一样,视图也是包括几个被定义的数据列和多个数据行,但就本质而言这些数据列和数据行来源于其所引用的表 。
所以MySQL视图不是真实存在的基础表而是一张虚表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中 。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据 。对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除 。
当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中 。
视图有很多优点,主要表现在:
视点集中
简化操作
定制数据
合并分割数据
安全性
二. 创建MySQL视图——create view 1. 语法 create [or replace] [algorithm = {undefined | merge | temptable}] view [db_name.]view_name [(column_list)] as select_statement [with [cascaded | local] check option]通过该语句可以创建视图,若给定了[or replace],则表示当已具有同名的视图时,将覆盖原视图 。select_statement是一个查询语句,这个查询语句可从表或其它的视图中查询 。视图属于数据库,因此需要指定数据库的名称,若未指定时,表示在当前的数据库创建新视图 。 表和数据库共享数据库中相同的名称空间,因此,数据库不能包含相同名称的表和视图,并且,视图的列名也不能重复 。 2. 使用举例 eg. 本例创建一个产品表(product)和一个购买记录表(purchase),再通过MySQL视图purchase_detail查询出购买的详细信息 。
创建成功后,输入:select * from purchase_detail; 运行效果如下:
3. 注意事项 创建视图存在如下注意事项: (1) 运行创建视图的语句需要用户具有创建视图(crate view)的权限,若加了[or replace]时,还需要用户具有删除视图(drop view)的权限; (2) select语句不能包含from子句中的子查询; (3) select语句不能引用系统或用户变量; (4) select语句不能引用预处理语句参数; (5) 在存储子程序内,定义不能引用子程序参数或局部变量; (6)在定义中引用的表或视图必须存在 。但是,创建了MySQL视图后,能够舍弃定义引用的表或视图 。要想检查视图定义是否存在这类问题,可使用check table语句; (7) 在定义中不能引用temporary表,不能创建temporary视图; (8) 在视图定义中命名的表必须已存在; (9) 不能将触发程序与视图关联在一起; (10) 在视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略 。 三. 修改MySQL视图——alter view 1. 语法 alter [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]该语句用于更改已有视图的定义 。其语法与create view类似 。 2. 使用举例 eg. 将上一小节中中创建的视purchase_detail进行修改,去掉qty列,语句如下:
以上的相关内容就是对MySQL视图的介绍,望你能有所收获 。
|