我正在尝试在我的表上创建一个触发器,这样当我插入数据时,它会尝试从一列(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$$
另外,这是我应该这样做的方式吗?对于数据库我是新手,因此,如果我做错了,请随时纠正我。
答案 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
中插入一行。