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版本 ...
随机推荐
- 【转】分布式架构的演进(JavaWeb)
作者:李小翀 链接:https://www.zhihu.com/question/22764869/answer/31277656 来源:知乎 1.初始 初始阶段 的小型系统 应用程序.数据库.文件等 ...
- Xamarine ContentPage.ToolbarItems 未显示/不显示在界面
将页面封装到NavigationPage中.在App.xaml.cs的构造函数中 将 MainPage = new MainPage(); 替换为 MainPage = new NavigationP ...
- Flutter 学习路线图
Flutter 学习路线图 如果你真的觉得很难,坚持不了了,那就放弃,既然放弃了就不要抱怨没有得到. 选择你热爱的,坚持你选择的,不抱怨放弃的. 前言 Flutter越来越火,学习Flutter的人越 ...
- wr720n v4 折腾笔记(三):网络配置与扩充USB
0x01 前言 网络配置比较简单,但是USB拓展就麻烦许多了,这里由于overlay的内存分配问题导致软件安装失败,这里找到了一种方法就是直接从uboot刷入南浦月大神的wr720n的openwrt固 ...
- 图论-BFS-最小高度的树 Minimum Height Trees
2018-09-24 12:01:38 问题描述: 对于一个具有树特征的无向图,我们可选择任何一个节点作为根.图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树.给出这样的一个图,写 ...
- C# 录音和播放录音-NAudio
在使用C#进行录音和播放录音功能上,使用NAudio是个不错的选择. NAudio是个开源,相对功能比较全面的类库,它包含录音.播放录音.格式转换.混音调整等操作,具体可以去Github上看看介绍和源 ...
- OpenCV-Python 哈里斯角检测 | 三十七
目标 在本章中, 我们将了解"Harris Corner Detection"背后的概念. 我们将看到以下函数:cv.cornerHarris(),cv.cornerSubPix( ...
- PyTorch专栏(八):微调基于torchvision 0.3的目标检测模型
专栏目录: 第一章:PyTorch之简介与下载 PyTorch简介 PyTorch环境搭建 第二章:PyTorch之60分钟入门 PyTorch入门 PyTorch自动微分 PyTorch神经网络 P ...
- 使用Keras进行深度学习:(五)RNN和双向RNN讲解及实践
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 笔者:Ray 介绍 通过对前面文章的学习,对深度神经网络(DNN) ...
- coding++ :在引入的css或者js文件后面加参数的作用
前沿: 有些小伙伴们在页面(F12)直接对 JS.CSS 文件进行编辑.或者打断点调试的时候 可能会发现 所有的操作都不生效,为什么? 原因可能存在以下情况 有时候可能会遇到js或者css文件引用后传 ...