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

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

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
临时表视图都是在关系型数据库使用的概念,但它们之间有着明显的区别。 1. 定义方式不同 临时表是基于数据表的定义方式,需要先创建表结构,再往表插入数据。而视图则是基于查询语句的定义方式,只需要定义一个查询语句,就可以将查询结果作为一张虚拟的表存在。 2. 存储方式不同 临时表是在数据库以独立的物理表形式存储,数据存储在磁盘上,可以通过SQL语句直接访问和修改。而视图并不存储数据,只是将查询语句的结果作为一个虚拟的表存在,每次查询视图时都会重新计算查询语句,因此查询视图的效率通常比查询表要低。 3. 作用范围不同 临时表通常只在当前会话有效,当会话结束后,临时表将会被删除。而视图的作用范围则可以跨越多个会话和用户,视图只要不被删除,就可以一直存在。 4. 数据更新方式不同 临时表可以直接执行增删改查操作,对数据进行修改,而视图只能进行查询操作,无法对视图进行修改。 5. 数据可见性不同 临时表的数据只能在创建该表的会话可见,其他会话无法访问。而视图可以被其他会话和用户访问,但是只能访问视图定义的数据,无法访问视图不存在的数据。 综上所述,临时表视图有着不同的定义方式、存储方式、作用范围、数据更新方式和数据可见性。在实际应用,需要根据具体的需求选择不同的方式来进行数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值