7.2.5 更新视图
2025年09月21日
7.2.5 更新视图
视图的使用并不限于抽象可以让用户执行SELECT语句的查询。它还可以作为更新底层表的接口。例如,假设要求一位办公室助理要更新包含员工联系方式的表中的键字段。这位助理应当只能查看和修改员工的名、姓氏、电子邮件地址和电话号码,而不能查看或操作社会保险号和工资。本章前面创建的employee_contact_info_view能满足这两个条件,可以作为一个可更新和可选择的视图。事实上,只有当查询满足如下任何一个条件时视图才是不可更新的:
➢ 包含聚集函数,如SUM();
➢ 其算法设置为TEMPTABLE;
➢ 包含DISTINCT、GROUP BY、HAVING、UNION或UNION ALL;
➢ 包含连接;
➢ 在FROM子句包含不可更新的视图;
➢ 在SELECT或FROM表中,在引用FROM子句中的表的WHERE子句中也包含子查询;
➢ 只引用直接量值,表示没有表要更新。
例如,为修改员工Bob Connors的电话号码,可以对此视图执行UPDATE查询,如下:
“可更新视图”一词并不限于UPOATE查询,还可以通过视图插入新记录,只要视图满足一些约束。
➢ 此视图必须包含底层表中没有指定默认值的所有列。
➢ 视图字段不能包含表达式。例如,视图列CEILING(salary)将使视图不可插入。
因此,根据前面的视图定义,无法通过employee_contact- info—view增加新的员工,因为表中未指定默认值的一些字段(如salary和ssn)没有包含在视图中。