返回介绍

5 资料维护与 View

发布于 2025-02-20 13:00:31 字数 5717 浏览 0 评论 0 收藏 0

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

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

  • 不可以包含计算或函式的字段
  • 只允许一对一的结合查询
  • View 元件的“ALGORITHM”不可以设定为“TEMPTABLE”

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

注: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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文