MySQL 学习笔记(5)— 视图优缺点、创建视图、修改视图、删除视图
1. 视图概念
简单来说,视图就是一个预定义的查询语句。视图在许多情况下可以当作表来使用,因此也被称为虚拟表(Virtual Table
)。
视图与表最大的区别在于它不包含数据,数据库中只存储视图的定义语句。
视图提供了一种 MySQL
的 SELECT
语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。
2. 视图优缺点
2.1 优点
替代复杂查询,减少复杂性。
将复杂的查询语句定义为视图,然后使用视图进行查询,可以隐藏具体的实现;提供一致性接口,实现业务规则。
在视图的定义中增加业务逻辑,对外提供统一的接口;当底层表结构发生变化时,只需要修改视图接口,而不需要修改外部应用,可以简化代码的维护并减少错误;控制对于表的访问,提高安全性。通过视图为用户提供数据访问,而不是直接访问表;同时可以限制允许访问某些敏感信息,例如身份证号、工资等。
2.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
实现相同的功能。
MySQL
和SQL Server
还支持使用ALTER VIEW view_name AS select_statement
; 命令修改视图的定义。
Oracle
和PostgreSQL
中的ALTER VIEW
命令用于修改视图的其他属性。
5. 删除视图
使用 DROP VIEW
命令可以删除一个视图:
DROP VIEW [IF EXISTS] view_name;
指定 IF EXISTS
选项后,删除一个不存在的视图时也不会产生错误。Oracle
不支持 IF EXISTS
选项。
6. 可更新视图
可更新视图是指通过视图更新底层表,对于视图的 INSERT
、UPDATE
、DELETE
等操作最终会转换为针对底层基础表的相应操作。可更新视图的定义需要满足许多限制条件,包括:
- 不能使用聚合函数或窗口函数,例如
AVG
、SUM
、COUNT
等; - 不能使用
DISTINCT
、GROUP BY
、HAVING
子句; - 不能使用集合运算符,例如
UNION
、INTERSECT
等; - 修改操作只能涉及单个表中的字段,不能同时修改多个表;
- 不同数据库实现的其他限制条件。
总之,对视图的修改只有在能够映射为对基础表的修改时,数据库才能执行视图的修改操作。
MySQL 学习笔记(5)— 视图优缺点、创建视图、修改视图、删除视图相关推荐
- ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用
ASM学习笔记2 - 类的创建和修改 -- ClassWriter的综合应用 上回我们说到,通过使用ClassVisitor和ClassReader,我们能够分析已经存在的类.这一节中,我们将使用Cl ...
- 第14章_视图(创建视图、查看视图、更新视图的数据、修改、删除视图)
第14章_视图 第14章_视图 1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 2.2 视图的理解 3. 创建视图 3.1 创建单表视图 3.2 创建多表联合视图 3.3 基于视图创 ...
- MySQL视图的创建、修改与删除
SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中 ...
- MySQL 学习笔记(1)— 创建/连接/选择/显示数据库(表) 查询单列(多列/所有列)/查询返回特定的行数 各种排序(单列/多列/降序/组合排序) 过滤数据
本文是对之前学习 MySQL 的一个总结,使用思维导图的方式将涉及到的知识点罗列出来,一方面作为自己对于知识点的归纳,另一方面也便于日后查询. 在该篇文章中将对 MySQL 的基本使用.检索基本数据. ...
- MySQL 学习笔记(13)— 创建表、修改表、删除表、清空表
1. 创建表 在 SQL 中,使用 CREATE TABLE 语句创建一个表: CREATE TABLE table_name (column1 data_type column_constraint ...
- Mysql学习笔记2-提示符+创建(摘自慕课)
原本mysql的提示符是:mysql> 第一种方式(把mysql提示符从mysql>修改成本地服务器名称): 第二种方式(把mysql提示符从localhost修改成asd): 提示符可跟 ...
- [权威指南]学习笔记——第3章 创建、更新和删除文档
插入并保存文档 db.foo.insert({文档}); 插入insert最大的文档为16mb,如果查询一个稳定大小,可以用Object.bsonsize(文档名),单位为字节 批量增加,mongoi ...
- MySQL学习笔记4:排序规则的修改
数据库的字符集和排序规则优先级:字段级别>表级别>schema级别>服务器级别(实例级别),如果没有设置字段级别的字符集和排序规则,那么默认就取表的,如果表上也没有设置那就默认取sc ...
- 小白终是踏上了这条不归路----小文的mysql学习笔记目录
** 小文的学习笔记正在每日连载当中 为了方便观察,小文在练习的时候用的是图形化工具SQLyog然后用共用到两张表,employees表和girls表. 如果有需要该软件和上述两张表的兄弟可以 关注 ...
- SQL server——sql命令创建、修改、删除表之记录
目录 学习内容.sql命令创建.修改.删除表 创建表 指定所属文件组 修改表 增加一列number 更改列属性 删除某一列 重命名表 删除表 分区表 创建表 添加文件组 分别为其添加数据文件 创建分区 ...
最新文章
- python中sorted函数逆序_Python中sorted函数的用法(转)
- springMVC对异常处理的支持
- pytorch 常用问题解决
- [NOI2013]快餐店
- 成为大厂AI算法工程师,“NLP/CV”都是你必须过的坎!
- 字符串匹配 sunday算法
- es 怎么嵌入 算法模型_快速ES-RNN: ES-RNN算法的GPU实现
- 外汇交易所巨头 Travelex 遭攻击暂停服务,详情不明
- Bailian2930 加减乘除【水题】
- Java字符串连接的几种方式
- restful levelsHATEOAS
- 上传图片方法大全 [网摘]
- 如何将java/Android签名工具keytool单独提取出来使用
- 逍遥安卓模拟器android,逍遥安卓模拟器
- 雨滴win7计算机路径,Rainmeter雨滴桌面Win7打不开怎么办?
- PyCharm专业版的下载及安装(破解版)亲测有效
- 正则表达式删除空白行
- ThingJS结合图表实现数据展示
- vue3.0 H5页面配置 Autoprefixer 报警Replace Autoprefixer browsers option to Browserslist config.
- 2021金山WPS秋招前端笔试题