MySQL使用Select触发IF语句

标签 mysql if-statement triggers

我正在尝试在表上创建一个触发器,以便当我插入数据时,它会尝试从一列(注释)中获取数据,并使用该数据更新另一表(masterData)的列注释(附加)。如果找不到,我希望将插入语句复制到另一个表(failedtofind)。我的触发器如下,但它报告我的 IF 语句存在语法错误,并且我无法完全使其正常工作:

DELIMITER $$
TRIGGER `testdb`.`testTable`
AFTER INSERT ON `testdb`.`testTable`
FOR EACH ROW
BEGIN    
    IF ((SELECT PrimaryID FROM testdb.masterData WHERE PrimaryID = NEW.PrimaryID) > 0 )
        UPDATE masterData AS t
        SET t.Additional = NEW.Notes
        WHERE t.PrimaryID = NEW.PrimaryID;
    ELSE
        INSERT IGNORE INTO failedtofind SET (all the columns);
    END IF;

END$$

另外,这是我应该做的吗?我在数据库方面是个新手,所以,一如既往,如果我做错了什么,请随时纠正我。

最佳答案

您在 IF(...) 之后缺少 THEN,它应该是

 IF ((SELECT PrimaryID FROM testdb.masterData WHERE PrimaryID = NEW.PrimaryID) > 0 ) THEN
 ...

我不确定 > 0 应该做什么 - 如果没有找到具有该 PrimaryID 的记录,则 SELECT 语句将计算为 NULL (而不是 0)。但它仍然应该按预期工作,因为 NULL > 0 计算结果为 NULL 并且它将在 failedtofind 中插入一行。

关于MySQL使用Select触发IF语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11714293/

相关文章:

java - JDBC - 连接到特定端口上的远程 MySQL 数据库

php - 将foreach ID插入到其他表中

mysql - 频繁项集生成的数据库和应用程序设计

javascript - 如何只触发第二个函数中的第一个函数

MYSQL触发器错误(很多函数)

mysql - 如何在不导致主键和外键冲突的情况下合并2个非空mysql数据库之间的数据

android - getContext 和 getResource 在 5.0 及更低版本之间的兼容性

Java 计算 IF 语句

c - 我的字符比较条件有什么问题?

java - 如何使我的触发器在类路径(h2 数据库)中可用