原文地址:http://www.cnblogs.com/mrdz/p/6195878.html

学习内容:

临时表和视图的基本操作...

临时表与视图的使用范围...

1.临时表

  临时表:临时表,想必大家都知道这个概念的存在。。。但是我们什么时候应该使用到临时表呢?当一个数据库存在着大量的数据的时候,我们想要获取到这个数据集合的一个子集,那么我们就可以使用临时表来保存我们想要的数据。。然后对临时表进行操作就可以了...使用临时表必然是有原因的。。使用临时表会加快数据库的查询性能....

create temporary table tmp_table  //新建一个临时表
(
name varchar(10) not null,
value integer not null,
);
临时表的创建很简单,只需要加一个temporary关键字就完成了表的创建... 临时表在我们与数据库断开连接的时候,系统将会自动的删除临时表并释放其占用空间..除了这种方式,我们还可以手动进行删除。。。 drop table tmp_table //与我们正常删除表的语句一样... create temporary table tmp_table select * from table_name;//将我们查询的数据直接插入到临时表当中... alter table tmp_table rename ttmp_table;//使用alter来重命名临时表... rename table tmp_table to ttmp_table;//rename在临时表中是不允许使用的...会发生错误。。。

  并不是我们使用了临时表数据库的查询性能一定就会得到提升,当我们的数据使用了很好的索引的时候,临时表的速度可能并不快...那么是不是任何时候都可以使用临时表呢?临时表的使用也是有以下限制的:

i.临时表只能使用在memory,myisam,merge,innodb存储引擎下。。。

ii.临时表不支持mysql簇。。

iii.在同一个query语句中,我们只能查询一次临时表。。

iv.show table语句不会列举临时表信息..

v.不能使用rename来重命名一个临时表,但是我们可以使用alter table语句来代替...

再举一个实际的例子:

create table user_info
(
user_id int not null,
user_name varchar(50) not null
); insert into user_info values(1,'aa'),(2,'bb').......//假设我们插入了10000条数据信息...那么我们想要查询id>5000 and id<8000的数据信息,那么我们就可以使用一个临时表了... drop procedure if exists query_performance_test; //如果存在这个存储过程则删除掉... delimiter $$ //设置$$符号为mysql的结束符,而不是分号了... create procedure query_performance_test()
begin //以begin开始
declare begintime; //声明变量
declare endtime;
set begintime=curtime(); //设置为当前时间...
drop temporary if exists userinfo_tmp; //如果临时表存在则删除掉当前临时表...
create temporary table userinfo_tmp//新建临时表
(
i_userid int not null,
v_username varchar(50) not null
) engine=memory;
insert into userinfo_tmp(i_userid,v_username) select user_id,user_name from userinfo where userid>5000 and userid<8000; //将我们想要查询的数据放置到临时表中...
select * from userinfo_tmp;
set endtime=curtime();
select endtime-begintime;
end //存储过程定义完毕,以end结束... delimiter; //将结束符号重新定义为默认的分号.... call query_profromance_test(); //调用存储过程....

最后的结果就会输出id在5000—8000之间的数据信息,并且还会输出查询的时间信息....

2.视图

  视图分为普通视图和物化视图,普通视图是虚拟表,就是把数据库中的基础数据表的数据进行重新归类,更易于使用和理解。物化视图是实体表,除了把视图数据进行视图存储外,其他类似普通视图,但查询速度一般要比普通视图快,一般用于大数据量的视图。

优点:

1.安全性:一般来时当我们创建一个数据库的时候有一些重要的信息是不希望用户看见的,那么我们就可以建立一个视图来设置一个权限,使得用户只能查看自己的基本数据...更重要的数据用户是无法得到的...

2.查询的性能有所改善...

3.对于复杂查询的需求,可以进行问题分解,然后将创建多个视图获取数据。将视图联合起来就能得到需要的结果了。比如进行多表查询时,我们希望使用一个统一的方式进行查询,那么我们建立一个视图,将每一个表的数据都放入到视图当中去。。。最后我们对视图进行操作,我们就可以得到想要的数据信息了....

CREATE TABLE student (stuno INT ,stuname NVARCHAR(60))

CREATE TABLE stuinfo (stuno INT ,class NVARCHAR(60),city NVARCHAR(60))

INSERT INTO student VALUES(1,'wanglin'),(2,'gaoli'),(3,'zhanghai')

INSERT INTO stuinfo VALUES(1,'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong')

-- 创建视图
CREATE VIEW stu_class(id,NAME,glass) AS SELECT student.`stuno`,student.`stuname`,stuinfo.`class`
FROM student ,stuinfo WHERE student.`stuno`=stuinfo.`stuno` SELECT * FROM stu_class//显示视图的结果...
+----+----------+--------+
| id | NAME | glass |
+----+----------+--------+
| 1 | wanglin | wuban |
| 2 | gaoli | liuban |
| 3 | zhanghai | qiban |
+----+----------+--------+ describe stu_class;//显示视图的基本信息... show table status like 'stu_class'//使用show方法显示视图的信息.... show create view stu_class //显示视图的详细信息。。。显示视图名称基本信息+视图中内部操作的代码等等.... 修改视图:
1.使用create or replace
mysql> delimiter //
mysql> create or replace view `stu_class` as select
-> `student`.`stuno` as `id` from(`student` join `stuinfo`) //join将两个表格进行联合...
-> where (`student`.`stuno`=`stuinfo`.`stuno`)//
delimter; desc stu_class; // desc 是descbibe的缩写,在数据库中写哪个都允许... select * from stu_class; 2.使用alter 。。。 alter view stu_class as select stuno from student; 更新视图。。。 UPDATE stu_class SET stuname='xiaofang' WHERE stuno=2//很简单,没什么过多的东西。。。。 删除视图:
drop view if exists stu_class;

更新的注意事项:

(1)视图中包含基本中被定义为非空的列

(2)定义视图的SELECT语句后的字段列表中使用了数学表达式

(3)定义视图的SELECT语句后的字段列表中使用聚合函数

(4)定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句

那么我们到底什么时候能使用到视图呢?

  在我们定义存储过程的时候,我们为了加快查询的效率,对数据进行复杂处理时,将代码封装在存储过程中,当我们调用存储过程的时候即可完成我们的查询操作...通过代码来完成对数据的操作....以便于我们在每次使用这类查询时只需要调用存储过程即可....存储过程的结构属于一个集合...

  而视图的结构是一个表,一个虚表,不进行实际的存储,但是我们在操作视图的同时,那么也就代表着操作着这个视图的基表...视图让我们看到的是我们想要的数据信息...给我的感觉,使用视图还是由于他的安全性,可以保存重要的信息。。用户只能通过视图来对自己的那部分信息进行操作,而没有权限对其他重要信息进行操作....

Mysql 临时表+视图的更多相关文章

  1. MySQL通过视图(或临时表)实现动态SQL(游标)

    >参考de优秀文章 写MySQL存储过程实现动态执行SQL Dynamic cursor in stored procedure MySQL通过视图(或临时表)实现动态SQL(游标). 因在实现 ...

  2. mysql view(视图)

    一,什么是视图 视图是存放数据的一个接口,也可以说是虚拟的表.这些数据可以是从一个或几个基本表(或视图)的数据.也可以是用户自已定义的数据.其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面 ...

  3. MySQL之视图、触发器、事务、存储过程、函数 流程控制

    MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...

  4. MySQL 的视图、触发器、事务、存储过程、函数

    MySQL 的视图.触发器.事务.存储过程.函数   阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句 ...

  5. MySQL之视图学习

    MYSQL---视图 1.概述: ​ 视图是从一个或者多个表中导出的,视图的行为与表非常类似,但视图是一个虚拟表.在视图中用户可以使用SELECT语句查询数据,以及使用INSERT.UPDATE和DE ...

  6. day 40 MySQL之视图、触发器、事务、存储过程、函数

    MySQL之视图.触发器.事务.存储过程.函数   阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上 ...

  7. mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...

  8. MySQL临时表与内存表

    在MySQL中有三种虚拟表:临时表.内存表.视图.下面简单介绍一下临时表和内存表的使用. 1.临时表 MySQL临时表在我们需要保存一些临时数据时是非常有用的.临时表在MySQL 3.23版本中添加. ...

  9. MySQL 临时表

    MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. 临时表在MySQL 3.23版本中添加,如果你的MySQL版本 ...

随机推荐

  1. C# 基础知识系列- 3 集合数组

    简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...

  2. python3爬虫爬取金庸小说所有角色

    # -*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup url = 'http://www.jinyongwang.c ...

  3. eNSP 交换机 路由器 PC 互连设计/实现

    0.实验目的 1.掌握网络设计的原理与步骤: 2.掌握IP分配.网关设置原则: 3.了解路由协议的作用,掌握网络互联设备的作用和配置. 1.实验环境 环境:eNSP模拟器 版本信息:1.3.00.10 ...

  4. 用c写的简单的日历(学习模块划分)

    简单日历 ​ 主要目的是学习函数模块划分,成品大概是这样,加了一些花里胡哨的东西(/▽\) ​ 分三个模块,主函数.c 显示.c 计算.c 与.h 文件 有两种实现方式,区别在于是否以数组在模块之间传 ...

  5. NBL小可爱纪念赛「 第一弹 」 游记(部分题解)

    比赛链接 洛谷:禁止含有侮辱性质的比赛 . ??? 反正我觉得,gyx挺危险的 不说废话. 首先,比赛经验,前几个小时不打,跟着刷榜. 一看 T1. 发现是道水题,直接切掉了. 然后看到了 T2. 感 ...

  6. (数据科学学习手札81)conda+jupyter玩转数据科学环境搭建

    本文示例yaml文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在使用Python进行数据分析时,很 ...

  7. TCP、UDP服务器模型 在网络程序里面,通常都是一

    TCP.UDP服务器模型 在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式. 目前最常用的服务器模型: 循环服务器:循环服务器在同一时刻只能响 ...

  8. iOS 图片加载速度优化

    FastImageCache 是 Path 团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动起来更顺畅,来看看它是怎么做的. 一.优化点 iOS 从磁盘加载一张图片,使用 UI ...

  9. flask中的分页器

    paginate():  分页查询,返回一个分页对象 paginate(参数1, 参数2, 参数3) : 参数1:当前是第几页(page) 参数2:每页显示几条信息(per_page) 参数3:err ...

  10. Ubuntu系统在Anaconda中安装Python3.6的虚拟环境

    原因:Anaconda的python版本是3.7的,TensorFlow尚不支持此版本,于是我们创建一个Python的虚拟环境以支持TensorFlow 创建tf环境 conda create --n ...