初学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查询运行出结果后,后续的操作需要用到你上面查询的结果(也就是说对你查询的结果再操作),这种情况下,我们需要建立临时表,将结果保存在临时表中!!!!
这些都是自己学数据库中遇到弯路,纯属个人见解!有什么不对的地方,希望能指出,感谢