视图是一个古老的数据库概念,一项传统的数据库技术。
它是由数据库里的数据(表或者其他视图)生成的一张“虚表”。一般用来归纳常用的查询数据。可以通过对视图数据操作(增删改),来实现对其来源数据的操作。
例如:学校的”学生基本情况表“可能会有近百个字段,常用的字段可能不到10个。就可以为这些常用字段做一个视图,简化日常工作。
它的作用,有一点像通用表表达式(cte)。不同的是,视图作为和表一样的数据库对象,可以长期保存,随时调用。
视图里不保存数据,每次对他进行操作,都会从“来源表”中重新抽取数据。这也是称它为”虚表“的原因。
例子数据表(t1学生表,t2课程表,t3选课表):
,
,
对于t1表,假设生日(sr)字段常常不用,可以创建一个只包含常用字段(学号、姓名)的视图v1:
create view v1 as select xh,xm from t1;
对于v1,可以像普通表一样进行CRUD操作。
查:
增:
删改略。对表有影响的操作,都是通过视图,作用在基础表t1上的。
如果视图数据来源于多张表:
create view v2 as select xm,cmc,cj from t1 join t3 on t1.xh=t3.xh join t2 on t3.cid=t2.cid;
查询方式和结果不变:
需要注意:一次增删改,仅允许影响一张表。
update v2 set cj=cj+1 where xm='zs';
如果试图影响多张表:
解析:
1、同时修改多表是一件复杂的事(如:想要同时修改A、B两张表,A表内容修改过后,视图内容就会发生变化,原本要修改的B表内容可能就匹配不到了。),很容易出问题,所以干脆禁止这么做。
2、对多表视图进行增删,必然牵涉到多表同时变化,所以这个操作,也就别想了。
小结:1、视图是可更新的虚表,多用于长期保存常用的查询内容。2、对单表可以很方便进行增删改操作。3、多表增删改需谨慎,稳妥的办法是直接修改基础表。
视图的修改:
alter view v2 (学号,姓名,科目,成绩) as select t1.xh,xm,cmc,cj from t1 join t3 on t1.xh=t3.xh join t2 on t3.cid=t2.cid;
先删除再创建。
视图的删除:
drop view v2;
截图略。
结合以上内容,可自学课本8.2节。