如何在一个 sql 触发器中使用多个事件?

Posted

技术标签:

【中文标题】如何在一个 sql 触发器中使用多个事件?【英文标题】:How to use multiple events in one sql trigger? 【发布时间】:2018-02-11 13:06:12 【问题描述】:

这是我目前的代码:

DROP TRIGGER `backup`;

DELIMITER $$
CREATE TRIGGER `backup` AFTER INSERT UPDATE DELETE
    ON `warehouse`
    FOR EACH ROW 
        BEGIN

        END$$
DELIMITER ;

这是我不断收到的错误:

我检查了我的 MariaDB 版本。现在是 10.1.21

如果我只使用一个事件,它可以工作,但使用两个或三个它会引发此错误。

Insert Update trigger how to determine if insert or update

【问题讨论】:

您必须为 INSERT、UPDATE 和 DELETE 创建三个单独的触发器 有什么办法可以一举搞定吗?我找到了一些示例,语法如下所示 请提供一个此类示例的链接。 @RickJames 我编辑了问题 该链接指向一个关于 SQL Server 的问题,它与 mysql 完全不同。注意将研究限制在同一个 RDBMS 引擎上;有很多不同之处。 (MySQL 和 MaraiDB 几乎完全相同。) 【参考方案1】:

在 MySQL 或 MariaDB 中,必须为一个事件定义每个触发器。您无法定义适用于多个事件的触发器。

https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html 的语法如下:

trigger_event:  INSERT | UPDATE | DELETE 

此语法表示法表示事件必须是三个值 INSERT、UPDATE 或 DELETE 之一。

如果我们DESCRIBE INFORMATION_SCHEMA.TRIGGERS,又发现了一条线索:

EVENT_MANIPULATION enum('INSERT','UPDATE','DELETE')

事件类型是enum,这意味着它只能有一个值,不能有多个。

您链接到的示例适用于 Microsoft SQL Server,而不是 MySQL 或 MariaDB。

尽管“Microsoft”和“MySQL”都以相似的音节开头,但它们是两种不同的产品,具有不同的功能。

【讨论】:

以上是关于如何在一个 sql 触发器中使用多个事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery 自定义插件中正确添加多个元素事件

如何在 PL/SQL 中的触发器后获取复选框的值?

如何使一个按键分别触发多个事件

如何在 SQL Server 的触发器中获取多个字段的旧值和新值?

如何找到在 BigQuery 中触发设置事件之前触发的事件?

如何在 BigQuery SQL 中将一组用户分组为 10 个群组?