视图是虚表,是从其他实表(有存放数据的表)或其他视图经过重新查询整理出来的表,它只是减少你调用长查询语句的麻烦,而且一般情况下, 视图是不允许数据修改的 (除了只从一个实表抽出若干列,而且没统计列和groupby,相关没涉及列修改符合表约束,这种视图部分DBMS允许修改)。
临时表我的理解为查询时用来根据查询条件重新排列元组的表(或者就是内存表memory,存放在内存的表?),临时表应该是存放在内存的,算是实表,但可能不可见(至少它只存在你查询的过程中,你最后只见到的是结果表),内存表唯一的优点就是IO快,但结构会偏简单,没事务特性,而且大小自然不及以磁盘为存放的表。而且DBMS关闭或系统关闭就会丢失,不是用来长期存放的(好像用来存放会话令牌比较适合)。
什么时候使用视图呢?
应用场景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连接,最后得到临时表数据,一次插入到结果表(永久表)。
答案:使用临时表,不用视图