如何在一个 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 触发器中使用多个事件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 的触发器中获取多个字段的旧值和新值?