暂无 |

5 资料维护与View

View元件除了提供比较方便的查询方式外,你也可以使用View元件来执行资料维护的工作。与View元件应用在查询资料时提供的方便性一样,不使用表格元件,而使用View元件来执行新增、修改或删除的工作,也可以增加资料维护的方便性。

要使用View元件来执行新增、修改或删除的工作,View元件所包含的查询叙述必须符合下列的规则:

  • 不可以包含计算或函式的栏位
  • 只允许一对一的结合查询
  • View元件的「ALGORITHM」不可以设定为「TEMPTABLE」

如果符合上列规定的View元件,就会称为「可修改的View元件、updattable views」。只有可修改的View元件,可以使用在「INSERT」、「UPDATE」或「DELETE」叙述中执行资料维护的工作。

注:View元件的「ALGORITHM」设定在这一章后面的「View的演算法」中讨论。

5.1 使用View元件执行资料维护

下列是一个可以执行资料维户的View元件,它的栏位没有包含计算或函式,也没有使用结合查询:

mysql_11_snap_23

如果要修改员工编号「7844」的佣金为600的话,你除了可以在「UPDATE」叙述中指定修改的表格名称为「emp」外,也可以在「UPDATE」叙述中指定View元件「EmpDept30View」:

mysql_11_snap_24

在执行上列的「UPDATE」叙述以后,不论是查询View元件或表格,都可以确定资料已经修改了:

mysql_11_snap_25

使用「INSERT」叙述新增纪录时,也可以指定View元件「EmpDept30View」:

mysql_11_snap_26

在执行上列的「INSERT」叙述以后,查询View元件所得到的结果并没有刚才新增的员工资料,查询表格时才可以确定资料已经新增,这是因为新增纪录的部门编号栏位资料为「NULL」的关系:

mysql_11_snap_27

与「INSERT」和「UPDATE」叙述一样,「DELETE」叙述也可以指定View元件的纪录资料:

mysql_11_snap_49

不过执行上列的删除叙述后,千万不要以为你已经删除员工编号「9001」的员工纪录了:

mysql_11_snap_50

5.2 使用「WITH CHECK OPTION」

你可以使用View元件来执行资料维护的工作,可是在执行新增或修改的时候,又可能会造成一些有问题的资料。如果你不希望产生这类的问题,你可以为View元件加入「WITH CHECK OPTION」的设定:

mysql_11_snap_28

加入「WITH CHECK OPTION」设定的View元件,在执行资料维护工作时,会先执行检查的工作,规则是一定要符合「View元件中WHERE设定的条件」:

mysql_11_snap_29

因为上列范例所新增的纪录资料,「deptno」栏位会储存「NULL」值,这样就违反View元件中「WHERE deptno = 30」的条件设定了,所以在执行以后会产生错误讯息。下列的修改叙述就可以正确的执行:

mysql_11_snap_30

View元件中的「WITH CHECK OPTION」设定,还有额外的「CASCADE」和「LOCAL」两个控制检查范围的设定:

mysql_11_snap_31

会有「CASCADE」和「LOCAL」这两个设定的原因,是因为View元件的资料来源可以一个表格,也可以是一个View元件:

mysql_11_snap_32

查询「EmpDept20View」后,传回的纪录资料包含「deptno = 20」条件,与设定在「EmpSalaryView」的「salary >= 1500」条件:

mysql_11_snap_33

检查范围设定为「LOCAL」的View元件,在执行资料维护的时候,只会检查是否符合自己的条件设定:

mysql_11_snap_34

如果执行资料维护的叙述违反「EmpSalaryView」的条件设定,还是可以正确的执行:

mysql_11_snap_35

如果你希望所有的View元件在执行资料维护的时候,都不可以出现这类的问题,就应该把View元件的检查范围设定为「CASCADE」:

mysql_11_snap_36

检查范围设定为「CASCADE」的View元件,在执行资料维护的时候,就不能违反所有VIew元件的条件设定:

mysql_11_snap_37

0

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论