视图 view

在查询中,我们经常把查询结果当成临时表来看,

view是什么?view可以看成一张虚拟表,是表通过某种运算得到的一个投影。

表的变化会影响到视图

既然视图只是表的某种查询的投影,所以主要步骤在于查询上,查询的结果命名为视图就可以了。

创建视图的语法

CREATE VIEW 视图 AS SELECT 语句;

mysql> create view stats
-> as
-> select cat_id,avg(shop_price) as pj
-> from goods
-> group by cat_id
-> order by pj;
Query OK, 0 rows affected (0.49 sec)

视图有什么作用?

1 视图可以简化我们的查询,比如,复杂的统计时,先用视图生成一个中间结果,再查询视图

2 更精细的权限控制。

3 数据多,分表时可以用到。

视图是表的一个影子,探讨表与视图,数据变化时相互影响的关系。

表的数据变化,要影响到视图的变化

视图变化了,表如何变?

视图某种情况下,也是可以修改的,视图的数据和表的数据一一对应,就像函数的映射。表可以推出视图的数据,视图可以推出表的数据。

视图没有数据文件和索引文件,视图只是一种关系。

注意

order by limit得到的结果,与表不是一一对应的。一一对应是指,根据select关系,从表中取出的行,只能计算出视图中确定的一行。反之,视图中任意抽一行,能够反推出表中的确定的一行。

对于一些简单视图,他在发挥作用的过程中,并没有建立表,而只是把条件存起来,下次查询,把条件一合并,直接去查表。

思考:相比于建临时表,那个快?

建表:查询->形成临时表->查询寻临时表

叠加:合并条件->查询表

到底要不要建临时表,还是合并语句,有algorithm决定

algorithm = merge 合并查询语句

temptable 临时表

undefined 未定义

mysql> create view v1
-> as
-> select * from goods where shop_price > 300;
Query OK, 0 rows affected (0.75 sec)
mysql> create algorithm = merge view v2
-> as
-> select * from goods where shop_price > 300;

虽然结果上相同,但是v2不是临时表。

如果拿不准是否建表,可以用undefined,让系统自己做判断。

MySQL学习(十二)的更多相关文章

  1. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  2. 打开order by的大门,一探究竟《死磕MySQL系列 十二》

    在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like  ...

  3. Scala学习十二——高阶函数

    一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...

  4. MYSQL数据库学习十二 使用MySQL运算符

    12.1 算术运算符 + - * /(DIV) %(MOD) 12.2 比较运算符 > < = <=> != <> >= <= BETWEEN AND ...

  5. MySQL学习(二)索引原理及其背后的数据结构

    首先区分几个概念: 聚集索引 主索引和辅助索引(即二级索引) innodb中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(sec ...

  6. MySQL学习笔记(二):MySQL数据类型汇总及选择参考

    本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型.  ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...

  7. MySQL学习(二)复制

        复制解决的问题是保持多个服务器之间的数据的一致性,就如同通过复制保持两个文件的一致性一样,只不过MySQL的复制要相对要复杂一些,其基本过程如下:     1)在主库上将数据更改记录到二进制日 ...

  8. MySQL学习笔记(二)

    连接与断开服务器 应该以下面的方式连接MySQL服务器,而不是将密码以明文方式输入连接. C:\> mysql -h host -u user -pEnter password: ******* ...

  9. MySQL学习(二) 数据类型

    MySQL支持多种列类型:数值类型.日期/时间类型和字符串(字符)类型. 数值类型 数值类型又分为整数型与小数型 整数型 下面的表显示了需要的每个整数类型的存储和范围 创建一张表 mysql> ...

随机推荐

  1. java中线程的停止以及LockSupport工具类

    看jstack输出的时候,可以发现很多状态都是TIMED_WAITING(parking),如下所示: "http-bio-8080-exec-16" #70 daemon pri ...

  2. echarts自定义图例legend文字和样式

    话不多说,先上效果图. 要完成这个图并不难,主要是下面那个图例比较难,需要定制. 让我们从官方文档找找思路,官方文档关于legend.formatter是这样的:链接在这 难点在于: 1.这里的图例文 ...

  3. Qt5使用QFtp,二次封装

    1.需要的东西 ftp.cpp,ftp.h是二次封装的ftp类,放在工程下包含 QFtp和qftp.h放在D:\Qt5.7.1\5.7\msvc2013\include\QtNetwork: Qt5F ...

  4. QML使用的内置对象

    QML从ECMAScript继承而来,所以支持这个ECMAScript.经常在QML工程中看到Math.Data.....等方法,但是在Qt手册里搜索不到,这是因为这些方法不是QtQuick的,而是E ...

  5. Selenium 15: How to Run Parallel Tests Using Selenium Grid and JUnit

    In this post, I will give two techniques and describe how to run your selenium tests in parallel by ...

  6. Windows下配置Jenkins 实现自动发布maven项目至tomcat(svn+maven+tomcat)

    Jenkins安装完成之后,需要我们对其配置,然后才可以实现自动部署项目. 前提 防火墙开放tomcat的8080端口 Linux(CentOS):firewall-cmd --zone=public ...

  7. Delphi XE5 for Android (八)

    delphi xe5 编译的程序在启动时会有短暂的黑屏出现,这个现象产生是因为启动首个activity时会加载一些初始化数据,整个时间大约在2~3秒,如何处理? 网上有些资料,这里主要参考和整理了CS ...

  8. fedora23 桌面工具栏fedy, 桌面美化 allow: 2'lau不是2'l2u

    ## Sudoers allows particular users to run various commands as ## the root user, without needing the ...

  9. 查找第K大的数

    类快排 第一种方法 o(n) #include <bits/stdc++.h> using namespace std; const int N = 1000; int s[N]; int ...

  10. oracle 之 定时任务,存储过程和游标等语法案例

    --定时任务 declare job20 number; begin sys.dbms_job.submit(job20,'test1;',sysdate,'sysdate+1'); end; --存 ...