首页 理论教育如何更新并使用可选择和可更新的视图

如何更新并使用可选择和可更新的视图

【摘要】:视图的使用并不限于抽象可以让用户执行SELECT语句的查询。本章前面创建的employee_contact_info_view能满足这两个条件,可以作为一个可更新和可选择的视图。例如,视图列CEILING将使视图不可插入。因此,根据前面的视图定义,无法通过employee_contact- info—view增加新的员工,因为表中未指定默认值的一些字段没有包含在视图中。

视图的使用并不限于抽象可以让用户执行SELECT语句的查询。它还可以作为更新底层表的接口。例如,假设要求一位办公室助理要更新包含员工联系方式的表中的键字段。这位助理应当只能查看和修改员工的名、姓氏、电子邮件地址和电话号码,而不能查看或操作社会保险号和工资。本章前面创建的employee_contact_info_view能满足这两个条件,可以作为一个可更新和可选择的视图。事实上,只有当查询满足如下任何一个条件时视图才是不可更新的:

➢ 包含聚集函数,如SUM();

➢ 其算法设置为TEMPTABLE;

➢ 包含DISTINCT、GROUP BY、HAVING、UNION或UNION ALL;

➢ 包含连接;

➢ 在FROM子句包含不可更新的视图;

➢ 在SELECT或FROM表中,在引用FROM子句中的表的WHERE子句中也包含子查询;(www.chuimin.cn)

➢ 只引用直接量值,表示没有表要更新。

例如,为修改员工Bob Connors的电话号码,可以对此视图执行UPDATE查询,如下:

“可更新视图”一词并不限于UPOATE查询,还可以通过视图插入新记录,只要视图满足一些约束。

➢ 此视图必须包含底层表中没有指定默认值的所有列。

➢ 视图字段不能包含表达式。例如,视图列CEILING(salary)将使视图不可插入。

因此,根据前面的视图定义,无法通过employee_contact- info—view增加新的员工,因为表中未指定默认值的一些字段(如salary和ssn)没有包含在视图中。