我正在尝试在表上创建一个触发器,以便当我插入数据时,它会尝试从一列(注释)中获取数据,并使用该数据更新另一表(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/