1. 视图概念

简单来说,视图就是一个预定义的查询语句。视图在许多情况下可以当作表来使用,因此也被称为虚拟表(Virtual Table)。

视图与表最大的区别在于它不包含数据,数据库中只存储视图的定义语句。


视图提供了一种 MySQLSELECT 语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。

2. 视图优缺点

2.1 优点

  1. 替代复杂查询,减少复杂性。
    将复杂的查询语句定义为视图,然后使用视图进行查询,可以隐藏具体的实现;

  2. 提供一致性接口,实现业务规则。
    在视图的定义中增加业务逻辑,对外提供统一的接口;当底层表结构发生变化时,只需要修改视图接口,而不需要修改外部应用,可以简化代码的维护并减少错误;

  3. 控制对于表的访问,提高安全性。通过视图为用户提供数据访问,而不是直接访问表;同时可以限制允许访问某些敏感信息,例如身份证号、工资等。

2.2 缺点

  1. 不当的使用可能会导致性能问题
    视图的定义中可能包含了复杂的查询,例如嵌套的子查询和多个表的连接查询,可能导致使用视图进行查询时性能不佳;

  2. 视图通常用于查询操作,可更新视图(Updatable View)需要满足许多限制条件。可更新视图可以支持通过视图对底层表进行增删改的操作。

3. 创建视图

CREATE VIEW 视图名称 (视图列名1,视图列名2)
AS
SELECT语句

eg:

CREATE VIEW product_sum (product_type, cnt_product)
AS
SELECT product_type, COUNT(*) FROM product GROUP BY product_type;

使用视图

SELECT product_type, cnt_product FROM product_sum;

应该避免在视图的基础上创建视图,因为多重视图会降低 SQL 的性能;定义视图时不要使用 ORDER BY 子句。

建议最好不要在视图的定义中使用 ORDER BY,因为这种排序并不能保证最终结果的顺序;而且可能由于不必要的排序降低查询的性能。

4. 修改视图

如果需要修改视图的定义,可以删除并重新创建视图。除此之外,各种数据库也提供了直接替换视图定义的命令:

-- Oracle、MySQL 以及 PostgreSQL 实现
CREATE OR REPLACE VIEW view_nameAS select_statement;-- SQL Server 实现
CREATE OR ALTER VIEW view_nameAS select_statement;

其中 CREATE OR REPLACE VIEW 表示如果视图不存在,创建视图;如果视图已经存在,替换视图。SQL Server 使用 CREATE OR ALTER VIEW 实现相同的功能。

MySQLSQL Server 还支持使用 ALTER VIEW view_name AS select_statement; 命令修改视图的定义。
OraclePostgreSQL 中的 ALTER VIEW 命令用于修改视图的其他属性。

5. 删除视图

使用 DROP VIEW 命令可以删除一个视图:

DROP VIEW [IF EXISTS] view_name;

指定 IF EXISTS 选项后,删除一个不存在的视图时也不会产生错误。Oracle 不支持 IF EXISTS 选项。

6. 可更新视图

可更新视图是指通过视图更新底层表,对于视图的 INSERTUPDATEDELETE 等操作最终会转换为针对底层基础表的相应操作。可更新视图的定义需要满足许多限制条件,包括:

  • 不能使用聚合函数或窗口函数,例如 AVGSUMCOUNT 等;
  • 不能使用 DISTINCTGROUP BYHAVING 子句;
  • 不能使用集合运算符,例如 UNIONINTERSECT 等;
  • 修改操作只能涉及单个表中的字段,不能同时修改多个表;
  • 不同数据库实现的其他限制条件。

总之,对视图的修改只有在能够映射为对基础表的修改时,数据库才能执行视图的修改操作。

MySQL 学习笔记(5)— 视图优缺点、创建视图、修改视图、删除视图相关推荐

  1. ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用

    ASM学习笔记2 - 类的创建和修改 -- ClassWriter的综合应用 上回我们说到,通过使用ClassVisitor和ClassReader,我们能够分析已经存在的类.这一节中,我们将使用Cl ...

  2. 第14章_视图(创建视图、查看视图、更新视图的数据、修改、删除视图)

    第14章_视图 第14章_视图 1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 2.2 视图的理解 3. 创建视图 3.1 创建单表视图 3.2 创建多表联合视图 3.3 基于视图创 ...

  3. MySQL视图的创建、修改与删除

    SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中 ...

  4. MySQL 学习笔记(1)— 创建/连接/选择/显示数据库(表) 查询单列(多列/所有列)/查询返回特定的行数 各种排序(单列/多列/降序/组合排序) 过滤数据

    本文是对之前学习 MySQL 的一个总结,使用思维导图的方式将涉及到的知识点罗列出来,一方面作为自己对于知识点的归纳,另一方面也便于日后查询. 在该篇文章中将对 MySQL 的基本使用.检索基本数据. ...

  5. MySQL 学习笔记(13)— 创建表、修改表、删除表、清空表

    1. 创建表 在 SQL 中,使用 CREATE TABLE 语句创建一个表: CREATE TABLE table_name (column1 data_type column_constraint ...

  6. Mysql学习笔记2-提示符+创建(摘自慕课)

    原本mysql的提示符是:mysql> 第一种方式(把mysql提示符从mysql>修改成本地服务器名称): 第二种方式(把mysql提示符从localhost修改成asd): 提示符可跟 ...

  7. [权威指南]学习笔记——第3章 创建、更新和删除文档

    插入并保存文档 db.foo.insert({文档}); 插入insert最大的文档为16mb,如果查询一个稳定大小,可以用Object.bsonsize(文档名),单位为字节 批量增加,mongoi ...

  8. MySQL学习笔记4:排序规则的修改

    数据库的字符集和排序规则优先级:字段级别>表级别>schema级别>服务器级别(实例级别),如果没有设置字段级别的字符集和排序规则,那么默认就取表的,如果表上也没有设置那就默认取sc ...

  9. 小白终是踏上了这条不归路----小文的mysql学习笔记目录

    ** 小文的学习笔记正在每日连载当中 为了方便观察,小文在练习的时候用的是图形化工具SQLyog然后用共用到两张表,employees表和girls表. 如果有需要该软件和上述两张表的兄弟可以 关注 ...

  10. SQL server——sql命令创建、修改、删除表之记录

    目录 学习内容.sql命令创建.修改.删除表 创建表 指定所属文件组 修改表 增加一列number 更改列属性 删除某一列 重命名表 删除表 分区表 创建表 添加文件组 分别为其添加数据文件 创建分区 ...

最新文章

  1. python中sorted函数逆序_Python中sorted函数的用法(转)
  2. springMVC对异常处理的支持
  3. pytorch 常用问题解决
  4. [NOI2013]快餐店
  5. 成为大厂AI算法工程师,“NLP/CV”都是你必须过的坎!
  6. 字符串匹配 sunday算法
  7. es 怎么嵌入 算法模型_快速ES-RNN: ES-RNN算法的GPU实现
  8. 外汇交易所巨头 Travelex 遭攻击暂停服务,详情不明
  9. Bailian2930 加减乘除【水题】
  10. Java字符串连接的几种方式
  11. restful levelsHATEOAS
  12. 上传图片方法大全 [网摘]
  13. 如何将java/Android签名工具keytool单独提取出来使用
  14. 逍遥安卓模拟器android,逍遥安卓模拟器
  15. 雨滴win7计算机路径,Rainmeter雨滴桌面Win7打不开怎么办?
  16. PyCharm专业版的下载及安装(破解版)亲测有效
  17. 正则表达式删除空白行
  18. ThingJS结合图表实现数据展示
  19. vue3.0 H5页面配置 Autoprefixer 报警Replace Autoprefixer browsers option to Browserslist config.
  20. 2021金山WPS秋招前端笔试题

热门文章

  1. SpringBoot部署脚本,拿走即用!
  2. 2022-2028年中国HDPE膜行业市场研究及投资发展分析报告
  3. 2022-2028年中国醋酸行业投资分析及前景预测报告
  4. 2022-2028年中国环保设备行业投资分析及前景预测报告
  5. python中的match和search的区别
  6. “勤奋”,是能让你走出低谷最有效的方法
  7. 算法工程师落地_模型的更新升级能力
  8. Lock、ReentrantLock、ReentrantReadWriteLock原理及应用深入解析
  9. CVPR2020行人重识别算法论文解读
  10. Docker核心技术之容器详解