返回介绍

4 OLD 与 NEW 关键字

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

在 triggers 元件中,可以使用一般的 SQL 叙述完成需要执行的工作,也可以使用在 stored routines 中讨论过的变量与流程控制,让 triggers 元件可以处理比较复杂的需求。MySQL 数据库在 triggers 元件中额外提供“OLD”与“NEW”两个关键字:

因为“OLD”与“NEW”两个关键字的特性,所以它们可以使用的 triggers 种类会有一些限制:

Trigger 种类OLDNEW
INSERT不能使用新增的字段资料
UPDATE修改前的字段资料修改后的字段资料
DELETE删除前的字段资料不能使用

以“cmdev.emp”表格的“UPDATE TRIGGER”来说,下列是使用“OLD”与“NEW”关键字取得的字段值:

延续上列为更新“cmdev.emp”表格执行纪录工作的 trigger 来说,如果想要让纪录的讯息更加详细,包含修改前与修改后的部门编号:

要完成上列的需求,就必须使用“OLD”与“NEW”关键字取得的字段值:

为表格建立“UPDATE TRIGGER”以后,就表示执行这个表格的修改动作,都会执行这个 trigger 元件:

如果要将“emp_before_update”的需求,修改为“只有在修改员工的部门编号时,才需要新增修改纪录”,你就可以使用在 sotred routines 讨论过的“IF”指令来完成这个需求:

在“INSERT TRIGGER”中使用“NEW”关键字时,要特别注意“AUTO_INCREMENT”字段型态:

如果有需要的话,你也可以使用“SET”叙述设定“NEW”关键字指定的字段值。以下列的情况来说:

要解决上列的问题,你可以要求在新增资料的时候,不要使用小写的文字。不过使用下列的“BEFORE INSERT TRIGGER”来处理的话,会更方便一些:

建立好这个“BEFORE INSERT TRIGGER”以后,就算新增的员工资料包含小写的名称与职务,这个 trigger 元件都会在新增纪录之前,把它们转换为大写:

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

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

发布评论

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