使用Select的MySQL Trigger IF语句

时间:2012-07-30 00:58:20

标签: mysql if-statement triggers

我正在尝试在我的表上创建一个触发器,这样当我插入数据时,它会尝试从一列(Notes)获取数据并使用数据更新另一个表(masterData)列注释(附加)。如果找不到它,我希望将insert语句复制到另一个表(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$$

另外,这是我应该这样做的方式吗?对于数据库我是新手,因此,如果我做错了,请随时纠正我。

1 个答案:

答案 0 :(得分:2)

在您的THEN

之后,您错过了IF(...)
 IF ((SELECT PrimaryID FROM testdb.masterData WHERE PrimaryID = NEW.PrimaryID) > 0 ) THEN
 ...

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