mysql 必知必会整理—视图[十二]
前言
简单整理一下视图。
正文
视图:
需要MySQL 5 MySQL 5添加了对视图的支持。因此,本章内容适用于MySQL 5及以后的版本。
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

此查询用来检索订购了某个特定产品的客户。任何需要这个数据的人都必须理解相关表的结构,并且知道如何创建查询和对表进行联结。
为了检索其他产品(或多个产品)的相同数据,必须修改最后的WHERE子句。
现在,假如可以把整个查询包装成一个名为productcustomers的虚拟表,则可以如下轻松地检索出相同的数据:

这就是视图的作用。productcustomers是一个视图,作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)。
我们已经看到了视图应用的一个例子。下面是视图的一些常见应用。
重用SQL语句。
简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
使用表的组成部分而不是整个表。
保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据(添加和更新数据存在某些限制。关于这个内容稍后还要做进一步的介绍)。
重要的是知道视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。
性能问题:
性能问题 因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。
如果你用多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降得很厉害。
因此,在部署使用了大量视图的应用前,应该进行测试.
下面是关于视图创建和使用的一些最常见的规则和限制。
与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
对于可以创建的视图数目没有限制。
为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。
视图不能索引,也不能有关联的触发器或默认值。
视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。
创建视图
视图用CREATE VIEW语句来创建。
使用SHOW CREATE VIEW viewname;来查看创建视图的语句。
用DROP删除视图,其语法为DROP VIEW viewname;。
更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;
如果要更新的视图存在,则第2条更新语句会替换原有视图。
视图的作用例子
- 视图的最常见的应用之一是隐藏复杂的SQL,这通常都会涉及联结。
create view productcustomers as
select cust_name,cust_contact,prod_id
from customers,orders,orderitems
where customers.cust_id = orders.cust_id
and orderitems.order_num = orders.order_num;
这条语句创建一个名为productcustomers的视图,它联结三个表,以返回已订购了任意产品的所有客户的列表。如果执行SELECT * FROM productcustomers,将列出订购了任意产品的客户。
然后进行查询:
select cust_name,cust_contact
from productcustomers
where prod_id ='TNT2'

可以看出,视图极大地简化了复杂SQL语句的使用。利用视图,可一次性编写基础的SQL,然后根据需要多次使用。
创建可重用的视图 创建不受特定数据限制的视图是一种
好办法。例如,上面创建的视图返回生产所有产品的客户而
不仅仅是生产TNT2的客户。扩展视图的范围不仅使得它能被
重用,而且甚至更有用。这样做不需要创建和维护多个类似
视图。
- 视图的另一常见用途是重新格式化检索出的数据。
select CONCAT(RTRIM(vend_name),'(',RTRIM(vend_country),')')
from vendors
ORDER BY vend_name
可以将格式化的语句保存未视图,这样就不需要每次写语句格式化。
create VIEW vendorlocaltions AS select CONCAT(RTRIM(vend_name),'(',RTRIM(vend_country),')')
from vendors
ORDER BY vend_name
- 用视图过滤不想要的数据
视图对于应用普通的WHERE子句也很有用。例如,可以定义
customeremaillist视图,它过滤没有电子邮件地址的客户。为此目的,
可使用下面的语句:

这也是在其他查询如果经常需要查询email不为空的情况下,可以简化语句。
WHERE子句与WHERE子句 如果从视图检索数据时使用了一条
WHERE子句,则两组子句(一组在视图中,另一组是传递给视
图的)将自动组合。
- 使用视图与计算字段,视图对于简化计算字段的使用特别有用。
它检索某个特定订单中的物品,计算每种物品的总价格:

更新视图
通常,视图是可更新的(即,可以对它们使用INSERT、UPDATE和
DELETE)。更新一个视图将更新其基表(可以回忆一下,视图本身没有数
据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行。
但是,并非所有视图都是可更新的。基本上可以说,如果MySQL不能正确地确定被更新的基数据,则不允许更新(包括插入和删除)。
这实际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:
分组(使用GROUP BY和HAVING);
联结;
子查询;
并;
聚集函数(Min()、Count()、Sum()等);
DISTINCT
导出(计算)列。
换句话说,本章许多例子中的视图都是不可更新的。这听上去好像是一个严重的限制,但实际上不是,因为视图主要用于数据检索。
结
视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。
视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。
mysql 必知必会整理—视图[十二]的更多相关文章
- 《MySQL必知必会》整理
目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...
- MySQL必知必会(第4版)整理笔记
参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解 ...
- 《MySQL必知必会》学习笔记整理
简介 此笔记只包含<MySQL必知必会>中部分章节的整理笔记.这部分章节主要是一些在<SQL必知必会>中并未讲解的独属于 MySQL 数据库的一些特性,如正则表达式.全文本搜索 ...
- 《MySQL 必知必会》读书总结
这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...
- 《MySQL必知必会》[01] 基本查询
<MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...
- mysql必知必会
春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...
- mysql 必知必会总结
以前 mysql 用的不是很多, 2 天看了一遍 mysql 必知必会又复习了一下基础. 200 页的书,很快就能看完, 大部分知识比较基础, 但还是了解了一些以前不知道的知识点.自己做一个备份,随 ...
- 读《MySql必知必会》笔记
MySql必知必会 2017-12-21 意义:记录个人不注意的,或不明确的,或不知道的细节方法技巧,此书250页 登陆: mysql -u root-p -h myserver -P 9999 SH ...
- 读《MySQL必知必会》我学到了什么?
前言 最近在写项目的时候发现自己的SQL基本功有些薄弱,遂上知乎查询MYSQL关键字,期望得到某些高赞答案的指点,于是乎发现了 https://www.zhihu.com/question/34840 ...
- 《mysql 必知必会》 速查指南
目录 增 添加一整行 插入多行 删 删除指定行 删除所有行 改 查 简单检索 结果筛选 结果排序 结果过滤 创建字段 处理函数 数据分组 其他高级用法 文章内容均出自 <MySQL 必知必会&g ...
随机推荐
- Java super关键字使用 +案列
1 package com.bytezero.supertest; 2 /* 3 * 4 * super关键字使用 5 * 1.super:理解为 父类的 6 * 2.super可以使用调用:属性,方 ...
- Java 关于继承小练习
1 package com.bytezero.inherit; 2 3 /* 4 * 面向对象的特征二:继承性 5 * 6 * 一.继承性的好处: 7 * ①减少了代码的冗余,提供了代码的复用性 8 ...
- C++ 错误 具有类型“const sort”的表达式会丢失一些 const-volatile 限定符以调用“bool sort::operator ()(int,int)” 如下:环境 vs2019 内容:set内置函数排序
C++ 错误 具有类型"const sort"的表达式会丢失一些 const-volatile 限定符以调用"bool sort::operator ()(int,int ...
- Codeforces Round 169 (Div. 2)C. Little Girl and Maximum Sum(差分、贪心)
目录 题面 链接 题意 题解 代码 总结 题面 链接 C. Little Girl and Maximum Sum 题意 给q个[l,r]将所有这些区间里面的数相加和最大. 可以进行的操作是任意排列数 ...
- Springboot-1.5.10.RELEASE 升级到 2.2.4.RELEASE版本遇到的一些问题总结
由于现在springboot的主流版本都已经是2.x的了,因此自己也打算将项目中使用的springboot1.5.10升级到2.2.4这个版本. 自己也能够预料得到,在升级过程中肯定会遇到各种各样的问 ...
- 替换掉Chrome浏览器的新标签页【已做好自己的插件,并提供下载】
https://jingyan.baidu.com/article/fc07f9891b256312ffe5190a.html 我做好了自己的 Chrome 新插件 https://files.cnb ...
- 市场主流的G-sensor芯片盘点
一 前记 1.简介 随着可穿戴智能硬件的广泛发展,G-sensor成了一个必不可少的器件.梳理,测试和运用这些传感器.是做可穿戴产品必不可少的环节. 二 产品解析 1.ST的G-sensor型号LIS ...
- api-ms-win-crt-***.dll, api-ms-win-core-***.dll,win7以后kernel.dll,msvc*.dll的改变。api-ms-win-crt-***.dll 有问题就是 c++ redist 版本过低。
api-ms-win-crt-***-|1-1-0.dll是redistributable c++的一部分.以往只会因为msvc*NNN.dll才要去找对应的redistributable c++版本 ...
- 在winform中如何实现双向数据绑定?
什么是双向数据绑定? 双向数据绑定是一种允许我们创建持久连接的技术,使模型数据和用户界面(UI)之间的交互能够自动同步.这意味着当模型数据发生变化时,UI会自动更新,反之亦然.这种双向数据绑定极大地简 ...
- 03.Java数据结构问题
目录介绍 3.0.0.1 在arrayList中System.arraycopy()和Arrays.copyOf()方法区别联系?System.arraycopy()和Arrays.copyOf()代 ...