视图是虚表,操作视图会更新实体表的数据。 
视图跟其它实体表共享一个命名空间,因此不能与实体表重名 
视图不会随着会话结束而消失

临时表跟实体表是两个互不相干的两个表,因此不存在操作临时表会影响到实体表的情况。 
会话结束临时表自动释放 
临时表不是内存表,show tables无法查看临时表

应用场景: 
视图 
应用场景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连接,最后得到临时表数据,一次插入到结果表(永久表)


 

2、尽量使用视图,能提高联表查询的效率;保护数据的安全性

##  玩转视图--demo  ##
DROP TABLE IF EXISTS demo_student,demo_stuinfo;
CREATE TABLE demo_student (stuno INT ,stuname NVARCHAR(60));
CREATE TABLE demo_stuinfo (stuno INT ,class NVARCHAR(60),city NVARCHAR(60));
INSERT INTO demo_student VALUES(1,'wanglin'),(2,'gaoli'),(3,'zhanghai');
INSERT INTO demo_stuinfo VALUES(1,'wuban','henan'),(2,'liuban','hebei'),(3,'qiban','shandong');

## 创建(OR REPLACE:如果存在则替换,【(id,NAME,glass)可以不要】)视图
CREATE OR REPLACE VIEW view_stu_class(id,NAME,glass) AS SELECT demo_student.`stuno`,demo_student.`stuname`,demo_stuinfo.`class`
FROM demo_student ,demo_stuinfo WHERE demo_student.`stuno`=demo_stuinfo.`stuno`;

#describe view_stu_class;  ##显示视图的基本信息...
#show table view_status like 'stu_class';  ##使用show方法显示视图的信息....
#show create view view_stu_class;  ##显示视图的详细信息。显示视图名称基本信息+视图中内部操作的代码等等.

##  CURD视图:
#1、查询:
select * from view_stu_class;
+----+----------+--------+
| id | NAME     | glass  |
+----+----------+--------+
|  1 | wanglin  | wuban  |
|  2 | gaoli    | liuban |
|  3 | zhanghai | qiban  |
+----+----------+--------+

#3、更新视图数据(实体表数据同步变更): -- 视图尽量用来查询,不要主动更新
UPDATE view_stu_class SET NAME='Changed' WHERE id=1;

#2、修改alter :
alter view view_stu_class as select stuno from demo_student;

#4、删除视图:
drop view if exists view_stu_class;