Mysql 临时表+视图
原文地址: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 临时表+视图的更多相关文章
- MySQL通过视图(或临时表)实现动态SQL(游标)
>参考de优秀文章 写MySQL存储过程实现动态执行SQL Dynamic cursor in stored procedure MySQL通过视图(或临时表)实现动态SQL(游标). 因在实现 ...
- mysql view(视图)
一,什么是视图 视图是存放数据的一个接口,也可以说是虚拟的表.这些数据可以是从一个或几个基本表(或视图)的数据.也可以是用户自已定义的数据.其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面 ...
- MySQL之视图、触发器、事务、存储过程、函数 流程控制
MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...
- MySQL 的视图、触发器、事务、存储过程、函数
MySQL 的视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句 ...
- MySQL之视图学习
MYSQL---视图 1.概述: 视图是从一个或者多个表中导出的,视图的行为与表非常类似,但视图是一个虚拟表.在视图中用户可以使用SELECT语句查询数据,以及使用INSERT.UPDATE和DE ...
- day 40 MySQL之视图、触发器、事务、存储过程、函数
MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上 ...
- mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...
- MySQL临时表与内存表
在MySQL中有三种虚拟表:临时表.内存表.视图.下面简单介绍一下临时表和内存表的使用. 1.临时表 MySQL临时表在我们需要保存一些临时数据时是非常有用的.临时表在MySQL 3.23版本中添加. ...
- MySQL 临时表
MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. 临时表在MySQL 3.23版本中添加,如果你的MySQL版本 ...
随机推荐
- 重定向URL乱码问题
问题:response.sendRedirect("http:/aaa.com/#/expressTracking?carCode=" + carCode); 后台java代码 ...
- Code Index: 基于Lucene.Net的代码检索工具
目录 用途 Github地址 示例 特性 用途 维护一个拥有巨大代码量的项目, 依靠自带的代码搜索工具搜索速度缓慢, 一个快速的代码检索工具就显得极为必要, 所以自己撸了个小工具. Github地址 ...
- 下载网页中的 pdf 各种姿势,教你如何 carry 各种网页上的 pdf 文档。
关联词: PDF 下载 FLASH 网页 HTML 报告 内嵌 浏览器 文档 FlexPaperViewer swfobject. 这个需求是最近帮一个妹子处理一下各大高校网站里的 PDF 文档下载, ...
- BigDecimal介绍及BigDecimal实现四舍五入
BigDecimal介绍及BigDecimal实现四舍五入 BigDecimal是什么? 我们知道float最大精度是7-8位有效数字,而double的最大精度是16-17位有效数字,那么大于16位的 ...
- XSS构造剖析
参考:邱永华<XSS跨站脚本攻击剖析与防御> 一 绕过XSS-filter 1.利用<>标记注射Html/JavaScript比如:<script>alert('X ...
- hdu1548 奇怪的电梯 dfs dijkstra bfs都可以,在此奉上dfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/5706/ 简单的规定深度进行搜索,代码如下: #include<bits/stdc++.h> usin ...
- C#中的9个“黑魔法”与“骚操作”
C#中的9个"黑魔法"与"骚操作" 我们知道C#是非常先进的语言,因为是它很有远见的"语法糖".这些"语法糖"有时过于好 ...
- 强化学习之一:从TensorFlow开始(Start from TensorFlow)
本文是对Tensorflow官方教程的个人(tomqianmaple@outlook.com)中文翻译,供大家学习参考. 官方教程链接 tf的扬帆起航Getting Started With Tens ...
- 机器学习中的 7 大损失函数实战总结(附Python演练)
介绍 想象一下-你已经在给定的数据集上训练了机器学习模型,并准备好将它交付给客户.但是,你如何确定该模型能够提供最佳结果?是否有指标或技术可以帮助你快速评估数据集上的模型? 当然是有的,简而言之,机器 ...
- 「MoreThanJava」当大学选择了计算机之后应该知道的
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...