创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。

基本语法

可以使用 CREATE VIEW 语句来创建视图。

语法格式如下:

CREATE VIEW <视图名> AS <SELECT语句>

语法说明如下。

  • <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
  • <SELECT语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

对于创建视图中的 SELECT 语句的指定存在以下限制:

  • 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。
  • SELECT 语句不能引用系统或用户变量。
  • SELECT 语句不能包含 FROM 子句中的子查询。
  • SELECT 语句不能引用预处理语句参数。

视图定义中引用的表或视图必须存在。但是,创建完视图后,可以删除定义引用的表或视图。可使用 CHECK TABLE 语句检查视图定义是否存在这类问题。

视图定义中允许使用 ORDER BY 语句,但是若从特定视图进行选择,而该视图使用了自己的 ORDER BY 语句,则视图定义中的 ORDER BY 将被忽略。

视图定义中不能引用 TEMPORARY 表(临时表),不能创建 TEMPORARY 视图。

WITH CHECK OPTION 的意思是,修改视图时,检查插入的数据是否符合 WHERE 设置的条件。

创建基于单表的视图

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

查看 test_db 数据库中的 tb_students_info 表的数据,如下所示。

mysql> SELECT * FROM tb_students_info;
+----+--------+---------+------+------+--------+------------+
| id | name   | dept_id | age  | sex  | height | login_date |
+----+--------+---------+------+------+--------+------------+
|  1 | Dany   |       1 |   25 | F    |    160 | 2015-09-10 |
|  2 | Green  |       3 |   23 | F    |    158 | 2016-10-22 |
|  3 | Henry  |       2 |   23 | M    |    185 | 2015-05-31 |
|  4 | Jane   |       1 |   22 | F    |    162 | 2016-12-20 |
|  5 | Jim    |       1 |   24 | M    |    175 | 2016-01-15 |
|  6 | John   |       2 |   21 | M    |    172 | 2015-11-11 |
|  7 | Lily   |       6 |   22 | F    |    165 | 2016-02-26 |
|  8 | Susan  |       4 |   23 | F    |    170 | 2015-10-01 |
|  9 | Thomas |       3 |   22 | M    |    178 | 2016-06-07 |
| 10 | Tom    |       4 |   23 | M    |    165 | 2016-08-05 |
+----+--------+---------+------+------+--------+------------+

【实例 1】在 tb_students_info 表上创建一个名为 view_students_info 的视图,输入的 SQL 语句和执行结果如下所示。

mysql> CREATE VIEW view_students_info-> AS SELECT * FROM tb_students_info;
mysql> SELECT * FROM view_students_info;
+----+--------+---------+------+------+--------+------------+
| id | name   | dept_id | age  | sex  | height | login_date |
+----+--------+---------+------+------+--------+------------+
|  1 | Dany   |       1 |   25 | F    |    160 | 2015-09-10 |
|  2 | Green  |       3 |   23 | F    |    158 | 2016-10-22 |
|  3 | Henry  |       2 |   23 | M    |    185 | 2015-05-31 |
|  4 | Jane   |       1 |   22 | F    |    162 | 2016-12-20 |
|  5 | Jim    |       1 |   24 | M    |    175 | 2016-01-15 |
|  6 | John   |       2 |   21 | M    |    172 | 2015-11-11 |
|  7 | Lily   |       6 |   22 | F    |    165 | 2016-02-26 |
|  8 | Susan  |       4 |   23 | F    |    170 | 2015-10-01 |
|  9 | Thomas |       3 |   22 | M    |    178 | 2016-06-07 |
| 10 | Tom    |       4 |   23 | M    |    165 | 2016-08-05 |
+----+--------+---------+------+------+--------+------------+

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

【实例 2】在 tb_students_info 表上创建一个名为 v_students_info 的视图,输入的 SQL 语句和执行结果如下所示。

mysql> CREATE VIEW v_students_info-> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)-> AS SELECT id,name,dept_id,age,sex,height,login_date-> FROM tb_students_info;
mysql> SELECT * FROM v_students_info;
+------+--------+------+-------+-------+----------+------------+
| s_id | s_name | d_id | s_age | s_sex | s_height | s_date     |
+------+--------+------+-------+-------+----------+------------+
|    1 | Dany   |    1 |    24 | F     |      160 | 2015-09-10 |
|    2 | Green  |    3 |    23 | F     |      158 | 2016-10-22 |
|    3 | Henry  |    2 |    23 | M     |      185 | 2015-05-31 |
|    4 | Jane   |    1 |    22 | F     |      162 | 2016-12-20 |
|    5 | Jim    |    1 |    24 | M     |      175 | 2016-01-15 |
|    6 | John   |    2 |    21 | M     |      172 | 2015-11-11 |
|    7 | Lily   |    6 |    22 | F     |      165 | 2016-02-26 |
|    8 | Susan  |    4 |    23 | F     |      170 | 2015-10-01 |
|    9 | Thomas |    3 |    22 | M     |      178 | 2016-06-07 |
|   10 | Tom    |    4 |    23 | M     |      165 | 2016-08-05 |
+------+--------+------+-------+-------+----------+------------+

可以看到,view_students_info 和 v_students_info 两个视图中的字段名称不同,但是数据却相同。因此,在使用视图时,可能用户不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

创建基于多表的视图

MySQL 中也可以在两个以上的表中创建视图,使用 CREATE VIEW 语句创建。

【实例 3】在表 product 和表product_price 上创建视图product_view_info,输入的 SQL 语句和执行结果如下所示。

CREATE VIEW product_view_info (商品ID,商品名,进货价,出售价)
AS SELECT product.productid,product.productname,product.price,product_price.price
FROM product,product_price WHERE product.productid=product_price.productid;
mysql> SELECT * FROM product_view_info;

通过这个视图可以很好地保护基本表中的数据。商品ID 字段对应 product表中的 productid 字段,商品名 字段对应 product表中的 productname字段,进货价字段对应 product 表中的 price字段,出售价字段对应product_price表中的price字段。

查询视图

视图一经定义之后,就可以如同查询数据表一样,使用 SELECT 语句查询视图中的数据,语法和查询基础表的数据一样。

视图用于查询主要应用在以下几个方面:

  • 使用视图重新格式化检索出的数据。
  • 使用视图简化复杂的表连接。
  • 使用视图过滤数据。

DESCRIBE 可以用来查看视图,语法如下:

DESCRIBE 视图名;

【实例 4】通过 DESCRIBE 语句查看视图 v_students_info 的定义,输入的 SQL 语句和执行结果如下所示。

mysql> DESCRIBE v_students_info;
+----------+---------------+------+-----+------------+-------+
| Field    | Type          | Null | Key | Default    | Extra |
+----------+---------------+------+-----+------------+-------+
| s_id     | int(11)       | NO   |     | 0          |       |
| s_name   | varchar(45)   | YES  |     | NULL       |       |
| d_id     | int(11)       | YES  |     | NULL       |       |
| s_age    | int(11)       | YES  |     | NULL       |       |
| s_sex    | enum('M','F') | YES  |     | NULL       |       |
| s_height | int(11)       | YES  |     | NULL       |       |
| s_date   | date          | YES  |     | 2016-10-22 |       |
+----------+---------------+------+-----+------------+-------+

注意:DESCRIBE 一般情况下可以简写成 DESC,输入这个命令的执行结果和输入 DESCRIBE 是一样的。

2、创建视图(CREATE VIEW)相关推荐

  1. SQL创建视图(CREATE VIEW)

    视图是基于 SELECT 语句的结果集的可视化的表. 什么是视图? 在 SQL 中,一个视图是基于某个 SELECT 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的域就是来自一 ...

  2. 基础-使用视图(CREATE VIEW....AS....)

    什么是视图 视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询: 输入:SELECT  cust_name,cust_contact FROM    customers,orde ...

  3. oracle基础|oracle创建序列(creating sequences)|oracle创建视图(creating view)的用法

    目录 一.序列篇 1.什么是序列 2.创建序列 语法说明: 创建序列demo 3.查看序列

  4. MySQL 学习笔记(5)— 视图优缺点、创建视图、修改视图、删除视图

    1. 视图概念 简单来说,视图就是一个预定义的查询语句.视图在许多情况下可以当作表来使用,因此也被称为虚拟表(Virtual Table). 视图与表最大的区别在于它不包含数据,数据库中只存储视图的定 ...

  5. mysql 查询view_MySQL之视图(VIEW)

    一.MySQL视图简介 视图是数据库系统中一种非常有用的数据库对象.MySQL 5.0 之后的版本添加了对视图的支持. 认识视图 视图是一个虚拟表,其内容由查询定义.同真实表一样,视图包含一系列带有名 ...

  6. Sql server中 如何用sql语句创建视图 及 视图的作用

    1.视图的作用 视图的作用: 第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话, 采购人员,可以需要一些与其有关的数据,而与 ...

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

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

  8. SQL语法——创建视图、可更新视图

    CREATE VIEW语句简介 CREATE [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}] VIEW view_name [(column_list)] ...

  9. oracle 创建视图

    /* CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery [WITH READ ONLY]; */ --如果普通用户第一次创 ...

  10. oracle添加创建视图权限不足,Oracle Scott创建视图权限不足解决办法

    Oracle Scott创建视图权限不足解决办法 在PL/SQL Developer数据库管理工具中,使用SCOTT用户帐号进行登录,新建SQL查询窗口,输入一条创建视图的SQL语句,随后弹出一个错误 ...

最新文章

  1. 金山发布《2006年度信息安全报告》
  2. HTML的标签描述15
  3. 图的邻接矩阵存储结构
  4. 【数理知识】《积分变换与场论》王振老师-目录
  5. SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版
  6. find vba 模糊_VBA积木代码方案:实现多重查找、模糊查找、清除值
  7. Java 的抽象特性:抽象类与接口深度解析
  8. 在 Docker 中使用 flannel - 每天5分钟玩转 Docker 容器技术(60)
  9. 共享语义 unix语义_语义UI按钮
  10. 代码整洁之道(二)优雅注释之道
  11. php docker 化,如何配置一个 Docker 化持续集成的 PHP 开发环境(四)
  12. Visual Studio 2012下载安装方法
  13. C#程序设计基础试题(一)
  14. C#通过WebBrowser对网页截图
  15. LPC2478(6)UART
  16. mac打开注册机显示“您没有权限来打开应用程序
  17. java-php-python-ssm演唱会购票系统计算机毕业设计
  18. 消息队列一|从秒杀活动开始聊起消息队列
  19. 【论文笔记】A survey on security and privacy of federated learning(综述)
  20. 5星|戴蒙德《为什么有的国家富裕,有的国家贫穷》:为什么有的国家能发展出好制度...

热门文章

  1. Matlab之Kalman:用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法
  2. CV:基于Keras利用训练好的hdf5模型进行目标检测实现输出模型中的脸部表情或性别的gradcam(可视化)
  3. ML之Kmeans:利用自定义Kmeans函数实现对多个坐标点(自定义四个点)进行自动(最多迭代10次)分类
  4. 成功解决解决VM软件安装Linux的Ubuntu过程,开启Linux出现Oprating System not found错误
  5. DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略
  6. 人工智能的时代?未来已至?
  7. UIBezierPath和CAShapeLayer画直线、CGContextRef画直线两种方案
  8. ArcObject开发时,axtoolbarcontrol中一些添加的按钮是灰色的问题
  9. [Android] 任意时刻从子线程切换到主线程的实现
  10. iOS RunLoop 初识