专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » mysql视图:mysql视图简介 »正文

mysql视图:mysql视图简介

来源: 发布时间:星期四, 2009年2月12日 浏览:231次 评论:0


. 视图概述

视图是个虚拟表其内容由查询定义同真实视图包含系列带有名称列和行数据但是视图并不在数据库中以存储数据值集形式存在行和列数据来自由定义视图查询所引用并且在引用视图时动态生成

对其中所引用基础表来说视图作用类似于筛选定义视图筛选可以来自当前或其它数据库个或多个表或者其它视图通过视图进行查询没有任何限制通过它们进行数据修改时限制也很少

视图是存储在数据库中查询SQL 语句它主要出于两种原因:安全原因 视图可以隐藏些数据如:社会保险基金表可以用视图只显示姓名地址而不显示社会保险号和工资数等原因是可使复杂查询易于理解和使用


  视图:查看图形或文档方式


  视图是从个或多个表或视图中导出其结构和数据是建立在对表查询基础上和表视图也是包括几个被定义数据列和多个数据行但就本质而言这些数据列和数据行来源于其所引用


  所以视图不是真实存在基础表而是张虚表视图所对应数据并不实际地以视图结构存储在数据库中而是存储在视图所引用表中


  视图经定义便存储在数据库中和其相对应数据并没有像表那样又在数据库中再存储通过视图看到数据只是存放在基本表中数据对视图操作和对表操作可以对其进行查询、修改(有限制)、删除


  当对通过视图看到数据进行修改时相应基本表数据也要发生变化同时若基本表数据发生变化则这种变化也可以自动地反映到视图中


  视图有很多优点主要表现在:


  •视点集中


  •简化操作


  •定制数据


  •合并分割数据


  •安全性

2. 创建视图——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)再通过视图purchase_detail查询出购买详细信息

CREATE TABLE product

(

product_id INT NOT NULL,

name VARCHAR(50) NOT NULL,

price DOUBLE NOT NULL

);

INSERT INTO product VALUES(1, 'apple ', 5.5);

CREATE TABLE purchase

(

id INT NOT NULL,

product_id INT NOT NULL,

qty INT NOT NULL DEFAULT 0,

gen_time DATETIME NOT NULL

);

INSERT INTO purchase VALUES(1, 1, 10, NOW);

CREATE VIEW purchase_detail AS SELECT product.name as name, product .price as price, purchase.qty as qty, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

创建成功后输入:SELECT * FROM purchase_detail;

运行效果如下:

+-------+-------+-----+-------------+

| name | price | qty | total_value |

+-------+-------+-----+-------------+

| apple | 5.5 | 10 | 55 |

+-------+-------+-----+-------------+

1 row in (0.01 sec)

3. 注意事项

创建视图存在如下注意事项:

(1) 运行创建视图语句需要用户具有创建视图(CRATE VIEW)权限若加了[OR REPLACE]时还需要用户具有删除视图(DROP VIEW)权限;

(2) SELECT语句不能包含FROM子句中子查询;

(3) SELECT语句不能引用系统或用户变量;

(4) SELECT语句不能引用预处理语句参数;

(5) 在存储子定义不能引用子参数或局部变量;

(6) 在定义中引用表或视图必须存在但是创建了视图后能够舍弃定义引用表或视图要想检查视图定义是否存在这类问题可使用CHECK TABLE语句;

(7) 在定义中不能引用TEMPORARY表不能创建TEMPORARY视图;

(8) 在视图定义中命名表必须已存在;

(9) 不能将触发和视图关联在起;

(10) 在视图定义中允许使用ORDER BY但是如果从特定视图进行了选择而该视图使用了具有自己ORDER BY语句它将被忽略

3. 修改视图——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列语句如下:

ALTER VIEW purchase_detail AS SELECT product.name as name, product .price as price, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

此时通过语句:select * from purchase_detail;对视图进行查询时结果如下:

+-------+-------+-------------+



| name | price | total_value |

+-------+-------+-------------+

| apple | 5.5 | 55 |

+-------+-------+-------------+

3. 注意事项

修改视图注意事项除了第条外跟创建视图注意事项是第(1)条应改为:

该语句需要具有针对视图CREATE VIEW和DROP权限也需要针对SELECT语句中引用某些权限

4. 删除视图——DROP VIEW

1. 语法

DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]该语句用户删除视图次删除多个视图[IF EXISTS]选项确保语句正确运行若没有该子句当指定视图不存在时将发生

2. 使用举例

Eg1. 删除在前面小节中创建视图purchase_detail:DROP VIEW purchase_detail;

Eg2. 删除个未知视图:DROP VIEW IF EXISTS test_view;

Eg3. 删除多个视图:DROP VIEW IF EXISTS test_view1, test_view2;

3. 注意事项

必须对要删除个或多个视图拥有DROP VIEW权限
1

相关文章

读者评论

  • 1过路人(118.248.66.*) 发布于:星期日, 2008年11月9日
    非常好

发表评论

  • 昵称:
  • 内容: