数据更新操作的结构:
视图 |
视图定义 |
CREATE VIEW |
建立视图 |
DROP VIEW |
删除视图 |
||
ALTER VIEW |
修改视图 |
||
视图操作 |
SELECT … FROM VIEW |
查询视图 |
|
UPDATE DELETE INSERT |
更新试图 |
视图对应的就是数据库三层模式中的外模式,所有的软件设计都是基于外模式,即基于视图建立的。视图是从一个或几个基本表或视图中导出的表,但它与基本表不同,他是虚表。1、即数据库只存放视图的定义而不存放数据。2、因为视图是从基本表中导出,所以对相应表的修改视图也会相应修改,操作方便。3、数据库三层模式的一个很重要的原因就是对数据库数据的保护,定义视图有利于保护数据。
1、 视图定义:
1、 建立视图:
语法:CREATE VIEW 视图名(属性1,属性2,属性3….) AS 子查询,可选WITH CHECK OPTION。
分析:1、WITH CHECK OPTION为强制视图上执行的所有数据的修改都必须满足select语句的设置准则,如create view IS_Studentas select * from table Student where Sage<=22。则每一次对视图的修改都必须满足Sage<=22。2、组成视图的属性列的名称必须全部省略或者全部指定,不可某列指定某列省略。3、若某列属性列不是单纯导出而是有一定的表达式或者聚集函数时,多表连接出现同名列时,在视图中应定义更符合的视图的属性列名时。需要对属性列重新指定列明。
注意:若一个视图是从单表中导出,并且只是去掉了其中的某些列获某些行,但是保留了主码,则这类视图称为行列子视图。在视图中进行查询时,需要先导出视图再进行查询,所以需要数据库系统对其进行转换,而有的非行列子视图可能会转换失败。
实例:创建WY_Student视图,用于查询外国语系学生的基本信息。
2、 删除视图:
语法:DROP VIEW 视图名 可选RESTRICT\CASCADE
分析:跟删除基本表语法一样,同样有级联操作。若有其他视图建立在该视图上,删除视图可以选择级联删除或者拒绝。
实例:删除WY_Student视图。
3、 修改视图:
语法:ALTER VIEW 视图名(属性1,属性2…) AS SELECT …
分析:修改试图其实跟创建视图一样,只需要在视图上添加自己想修改的部分数据,或者修改相应的子查询就可以了。可以理解为删除原视图重新创建一个新视图。
实例:修改视图JS_GZ,把职称为副教授的预发工资改为90%。
2、 视图操作:
1、 查询视图:
语法:SELECT 属性1,属性2…. FROM 视图名 where 条件
分析:视图查询跟表查询语法一模一样。不需要多解释。
实例:基于视图JSJ2_Teacher视图查询政治系教师教工号和姓名
2、 更新视图:
分析:更新视图操作包括三点:插入,更新,删除。因为视图不存放数据,所以对视图的更新操作最终都会变成对基本表的更新操作,所以接下来的操作语法其实跟基本表的操作没什么两样。
注意:在更新时,可能会有意无意的插入或修改不属于视图范围的数据,这时若视图上定义了WITH CHECK OPTION的话,DBS会检查定义视图的条件,对不满足条件的操作拒绝执行。
1、 INSERT:
语法:INSERT INTO 视图(属性1,属性2….) VALUES (…..)
注意:这里在视图内进行插入操作,所以对于视图中没有,基本表中出现的属性,会自动填NULL 。
实例:对JSJ2_Teacher视图插入教师信息。
2、 UPDATE:
语法:UPDATE 视图名 SET …WHERE …
实例:对周真教师修改系为艺术。
3、 DELETE:
语法:DELETE FROM 视图名 WHERE …
注意:在视图上删除,对基本表数据也会删除。
实例:删除周真教师的信息。