sql中临时表和视图的区别--从应用场景角度理解

初学sql时,视图和临时表的概念不容易区分,以下给出了视图和临时表一些应用场景,希望能从中理解两者之间的区别

1. 视图概念:

简单说,视图是按照你的sql语句生成的一个虚拟的东西,本身并不占数据库的空间

譬如有过这个表

create table table_1(id int,name varchar(100))

然后有这么一个视图

create view view_1 as select id from table_1

当你表里的数据增加或者删除的时候,你视图里的内容也随之变化

总之你不能对视图进行update或者insert into操作

说白了,就是视图的变化随着表的变化而变化

除非重新create or replace view_1才能把这个视图中的东西改掉

 2.临时表的概念:

临时表的很简单,MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。意思就是临时表就储存在内存中,临时创建的表,你把sql语句跑完,关掉,它就没了。所以,我们经常只是在存储过程或者频繁操作语句的时候能用到临时表。(下面给出了临时表的应用场景)

什么时候使用视图呢?

应用场景1:保密工作,比如有一个员工工资表,如果你只希望财务看到员工工资这个字段,而其他人不能看到工资字段,那就用一个视图,把工资这个敏感字段过滤掉

应用场景2:有一个查询语句非常复杂,大概有100行这么多,有时还想把这个巨大无比的select语句和其他表关联起来得到结果,写太多很麻烦,可以用一个视图来代替这100行的select语句,充当一个变量角色

什么时候用临时表呢?

应用场景1:你在短期内有很多DML操作,比如京东淘宝亚马逊的购物车表,把东西放购物车(insert),变更数量(update),删除商品(delete),一旦结算金钱后,这些数据就要清掉,这时需要用临时表

应用场景2:在导出数据时,你可能不想导完整的数据库,或者表,你可能只想要导出符合某些条件的数据,那么你可以创建临时表,把select语句插入到临时表,接着导出这个临时表,导完以后通过结束session或者事务的方式,让这些没用的数据自动清理掉

应用场景3:你在写存储过程时,有很多的连接,比如你需要连接A,B,C,D,E,F,G,H那么多张表,才能得到你的结果表,同时做连接的消耗太大,你可以先A,B,C连接的结果,放在临时表,接着再把这张临时表,跟D,E,F连接,作为新的结果放在临时表,接着再把临时表与G,H连接,最后得到临时表数据,一次插入到结果表(永久表)。

总结:

先说下区别吧(因为差别还是很大,就捡重点说吧)

视图就是为了安全起见,不让用户看到表的结构,其实就是虚的表根本不存在,呈现方式其实就是一段sql代码

临时表呢,基本是在sql操作过程中遇到,辅助我们sql语句的实现。有一个场景你需要记住,让你理解临时表的概念:

当你sql查询运行出结果后,后续的操作需要用到你上面查询的结果(也就是说对你查询的结果再操作),这种情况下,我们需要建立临时表,将结果保存在临时表中!!!!

这些都是自己学数据库中遇到弯路,纯属个人见解!有什么不对的地方,希望能指出,感谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值