数据库之视图

数据更新操作的结构:

视图

视图定义

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 …

注意:在视图上删除,对基本表数据也会删除。

实例:删除周真教师的信息。



阅读更多
换一批

没有更多推荐了,返回首页