一. 视图概述

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

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

二. 创建视图——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 set (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的语句,它将被忽略。

三. 修改视图——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语句中引用的每一列的某些权限。

四. 删除视图——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的权限

mysql创建视图注意事项_mysql视图创建注意事项(转)相关推荐

  1. mysql创建视图需注意_mysql视图创建注意事项

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

  2. mysql表的视图怎么建立_MySQL如何创建视图

    基本语法 可以使用 CREATE VIEW 语句来创建视图. 语法格式如下: CREATE VIEW AS 语法说明如下. :指定视图的名称.该名称在数据库中必须是唯一的,不能与其他表或视图同名. : ...

  3. mysql视图实现的_mysql视图是什么?怎么实现?

    mysql视图是什么?怎么实现? 发布时间:2020-05-21 18:00:24 来源:亿速云 阅读:152 作者:鸽子 视图本身是一张虚拟表,不存放任何数据.在使用SQL语句访问视图的时候,获取的 ...

  4. mysql视图的简介_mysql视图简介

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

  5. mysql实验视图及索引_MySQL视图及索引

    视图 视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据. 视图的作用.优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 //创建.修 ...

  6. mysql 视图调用存储过程_MySQL视图、存储过程

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 什么是视图(视图) 虚拟表 内容类似于真实表,有字段和记录 该视图不以数据库中存储的数据的形式存在 行和列的数据来自 ...

  7. MySQL查询与视图实验总结_MySQL 视图 总结

    什么是视图 视图是从一个或多个表中导出来的表,是一种虚拟存在的表. 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据. 数 ...

  8. mysql视图使用场景_MySQL视图适用场景

    问题描述: MySQL视图适用于哪些场景? 解决方法: 1.视图能简化用户操作.视图机制使用户可以将注意力集中在所关心的数据上.如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简 ...

  9. mysql 视图 过程 函数_MySQL视图,函数,触发器,存储过程

    1. 视图 视图是一个虚拟表,它的本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来, ...

  10. mysql 视图 速度慢_mysql 视图查询速度慢

    场景: 表 stockpooldata_flash CREATE TABLE `stockpooldata_flash` ( `id` bigint(15) NOT NULL AUTO_INCREME ...

最新文章

  1. 基于云上分布式NoSQL的海量气象数据存储和查询方案
  2. oracle函数查询数据字典
  3. HTML5 Maker – 在线轻松制作 HTML5 动画效果
  4. “国货之光” 完美日记的微服务实践和优化思路
  5. 客户端产生CLOSE WAIT状态的解决方案
  6. 一款适用于家庭智能设备的带摄像头的开发板—最主要是价格低的超乎你想象
  7. 【翻译】【CGWORLD】怪物猎人携带版3rd制作介绍
  8. Spring 获取 request 的几种方法及其线程安全性分析
  9. (ab)使用Java 8 FunctionalInterfaces作为本地方法
  10. 计算机安全事故由谁整改,信息安全检查整改方案 整改方案 .doc
  11. [改善Java代码]不推荐使用binarySearch对列表进行检索
  12. [转] Java内部类详解
  13. 人工智能白皮书(2022年)
  14. 微信多开下载安装使用及更新方式
  15. 场地测量的方法和程序_施工测量方案
  16. python高级篇----网络编程与爬虫
  17. win7共享wifi之bat文件
  18. 开源硬件的舞者--WIZnet
  19. Failed to declare queue
  20. 安卓修炼之路必要要知道的要求和建议

热门文章

  1. word 域更新的锁定和解锁
  2. 如何判断工作簿中是否存在某个工作表
  3. 【excel】插入其他文件做工作表
  4. Python中的Counter.most_common()方法
  5. python微信推送{u‘errcode‘: 40008, u‘errmsg‘: u‘invalid message type rid: 6111061f-19703d5b
  6. FBEC2020专访 | 贾瑶琪:Substrate可以在Web3.0中找出更多有意思的创新应用
  7. DLL load failed while importing _sqlite3: 找不到指定的模块。
  8. 无人机——像素坐标系转世界坐标系(NED)
  9. 比勤奋更能决定人生的,是复利思维
  10. 模拟科目二侧方位停车训练