【问题标题】:Execute MySQL Trigger only when specific NEW value exists仅当存在特定的 NEW 值时才执行 MySQL 触发器
【发布时间】:2021-04-30 11:04:02
【问题描述】:

我只想在 NEW 中的特定值存在且不为空时执行我的 MySQL(MariaDB) 触发器。

如何将触发器包装在 if 子句中,以检查新插入是否包含一个值,例如 Name。因此,如果有一个新的插入或更新查询未设置字段Name,我不想运行触发器。

我试过了

IF NEW.Name IS NOT NULL
BEGIN
 ...
END

但它不起作用。

我的实际触发代码确实正确使用了 NEW 中的值。

我的触发器是这样的。

INSERT INTO Produkte (Textilkennzeichen, Produktnummer, Bestand, createdAt, updatedAt)
VALUES (NEW.Textilkennzeichen, NEW.Produktnummer,
@Bestand := (
    SELECT IFNULL(SUM(`Anzahl`), 0)
    FROM Eintragungen
    WHERE Produziert = true
    AND Textilkennzeichen = NEW.Textilkennzeichen
    AND Produktnummer = NEW.Produktnummer
)
-
((
    SELECT IFNULL(SUM(`Anzahl`), 0) 
    FROM Eintragungen
    WHERE Verkauf = true
    AND Textilkennzeichen = NEW.Textilkennzeichen
    AND Produktnummer = NEW.Produktnummer
)
+
(
    SELECT IFNULL(SUM(`Anzahl`), 0)
    FROM Eintragungen
    WHERE Schenkung = true
    AND Textilkennzeichen = NEW.Textilkennzeichen
    AND Produktnummer = NEW.Produktnummer
)
+
(
    SELECT @amount_r := IFNULL(SUM(`Anzahl`), 0)
    FROM Eintragungen
    WHERE Reklamation = true
    AND Textilkennzeichen = NEW.Textilkennzeichen
    AND Produktnummer = NEW.Produktnummer
)), NOW(), NOW())
ON DUPLICATE KEY UPDATE Bestand = @Bestand

【问题讨论】:

  • 为什么不把IF 放在BEGIN/END 块中,让它成为触发器的一部分?
  • if 的正确语法是 IF...THEN...ENDIF;
  • @GordonLinoff 我实际上并没有在我使用的数据库应用程序中写 BEGIN/END。我直接从INSERT 开始,但如果我把IF NEW.Name IS NOT NULL 放在开头,它也不起作用。
  • @P.Salmon 我也不能使用IF THEN END IF。我收到以下错误。您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在第 37 行的“END IF”附近使用的正确语法。我正在使用 Sequel Pro 来管理我的数据库。
  • IF NEW.Name IS NOT NULL THEN {your INSERT query}; END IF;

标签: mysql sql database triggers mariadb


【解决方案1】:

代码应该是

if something then
   insert ...;
endif;

大概是您的 ide 使 create..for 每行开始...结束

所以你最终得到 创建触发器.. 对于每一行 开始 如果有的话 插入 ...; 万一; 结束

【讨论】:

    猜你喜欢
    • 2013-03-05
    • 1970-01-01
    • 2011-09-11
    • 2014-04-23
    • 2016-03-13
    • 1970-01-01
    • 2017-12-10
    • 2015-10-19
    • 2019-04-29
    相关资源
    最近更新 更多