返回介绍

2 建立 Triggers

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

下列是建立 trigger 元件的语法:

如果 trigger 元件执行的工作比较复杂,需要一个以上的叙述时,就要把叙述放在“BEGIN”与“END”区块中:

你可以依照需求为一个表格建立不同的 trigger 元件:

以上列讨论的需求来说,每一次修改“cmdev.emp”表格资料,都必须新增一笔纪录到“cmdev.emplog”表格中。你要为“cmdev.emp”表格建立一个“UPDATE TRIGGER”;而“BEFORE”与“AFTER”就是“之前”与“之后”的意思。如果建立“BEFORE UPDATE TRIGGER”,那就表示在修改资料前会执行 trigger;如果建立“AFTER UPDATE TRIGGER”,那就表示在修改资料后会执行 trigger。以这个需求来说,“BEFORE”或“AFTER”都是一样的。

建立 trigger 元件与建立 stored routines 的方式一样,你也要使用“SQL script”来执行建立 trigger 的工作。下列的范例建立一个名称为“emp_before_update”的 trigger 元件:

执行上列的叙述后,MySQL 数据库会储存你建立的 trigger 元件,可是它并不像 stored routines 可以用来呼叫与执行;MySQL 数据库会自动帮你执行这些储存在 trigger 中的叙述。

为“cmdev.emp”表格建立一个“BEFORE UPDATE TRIGGER”以后,只要发生修改“cmdev.emp”表格资料的情况,MySQL 数据库会自动执行这个 trigger 中的叙述:

不论是“UPDATE”或是其它两种 Trigger 元件,MySQL 数据库都是以“纪录”来执行 trigger。以下列的范例来说,一个会修改三笔纪录的“UPDATE”叙述,MySQL 数据库会执行 trigger 三次:

如果在执行修改“cmdev.emp”表格叙述以后,实际上并没有修改任何纪录资料,那 MySQL 数据库也不会执行 trigger:

在你建立 trigger 元件时,要特别注意下列的限制:

  • 同一个数据库不可以有相同名称的 Trigger
  • TEMPORARY 表格与 View 不可以建立 Trigger
  • 不可以使用“SELECT”叙述
  • 不可以使用“CALL”叙述
  • 不可以使用与交易(transactions) 相关的叙述,包含“START TRANSACTION”、“COMMIT”与“ROLLBACK”

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

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

发布评论

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