View元件除了提供比较方便的查询方式外,你也可以使用View元件来执行资料维护的工作。与View元件应用在查询资料时提供的方便性一样,不使用表格元件,而使用View元件来执行新增、修改或删除的工作,也可以增加资料维护的方便性。
要使用View元件来执行新增、修改或删除的工作,View元件所包含的查询叙述必须符合下列的规则:
如果符合上列规定的View元件,就会称为「可修改的View元件、updattable views」。只有可修改的View元件,可以使用在「INSERT」、「UPDATE」或「DELETE」叙述中执行资料维护的工作。
注:View元件的「ALGORITHM」设定在这一章后面的「View的演算法」中讨论。
下列是一个可以执行资料维户的View元件,它的栏位没有包含计算或函式,也没有使用结合查询:
如果要修改员工编号「7844」的佣金为600的话,你除了可以在「UPDATE」叙述中指定修改的表格名称为「emp」外,也可以在「UPDATE」叙述中指定View元件「EmpDept30View」:
在执行上列的「UPDATE」叙述以后,不论是查询View元件或表格,都可以确定资料已经修改了:
使用「INSERT」叙述新增纪录时,也可以指定View元件「EmpDept30View」:
在执行上列的「INSERT」叙述以后,查询View元件所得到的结果并没有刚才新增的员工资料,查询表格时才可以确定资料已经新增,这是因为新增纪录的部门编号栏位资料为「NULL」的关系:
与「INSERT」和「UPDATE」叙述一样,「DELETE」叙述也可以指定View元件的纪录资料:
不过执行上列的删除叙述后,千万不要以为你已经删除员工编号「9001」的员工纪录了:
你可以使用View元件来执行资料维护的工作,可是在执行新增或修改的时候,又可能会造成一些有问题的资料。如果你不希望产生这类的问题,你可以为View元件加入「WITH CHECK OPTION」的设定:
加入「WITH CHECK OPTION」设定的View元件,在执行资料维护工作时,会先执行检查的工作,规则是一定要符合「View元件中WHERE设定的条件」:
因为上列范例所新增的纪录资料,「deptno」栏位会储存「NULL」值,这样就违反View元件中「WHERE deptno = 30」的条件设定了,所以在执行以后会产生错误讯息。下列的修改叙述就可以正确的执行:
View元件中的「WITH CHECK OPTION」设定,还有额外的「CASCADE」和「LOCAL」两个控制检查范围的设定:
会有「CASCADE」和「LOCAL」这两个设定的原因,是因为View元件的资料来源可以一个表格,也可以是一个View元件:
查询「EmpDept20View」后,传回的纪录资料包含「deptno = 20」条件,与设定在「EmpSalaryView」的「salary >= 1500」条件:
检查范围设定为「LOCAL」的View元件,在执行资料维护的时候,只会检查是否符合自己的条件设定:
如果执行资料维护的叙述违反「EmpSalaryView」的条件设定,还是可以正确的执行:
如果你希望所有的View元件在执行资料维护的时候,都不可以出现这类的问题,就应该把View元件的检查范围设定为「CASCADE」:
检查范围设定为「CASCADE」的View元件,在执行资料维护的时候,就不能违反所有VIew元件的条件设定: