2016-11-14 95 views
1

任何帮助将受到好评。 :)带有条件触发器的正确​​MySQL语法是什么?

场景:我有一个MySql表'artworkjobs_proudction'。我试图在PHPMyAdmin中创建一个触发器,在表中的某些字段符合特定条件时设置日期。由于它是多种条件,它似乎是一个IF条件是要走的路。下面是触发:

CREATE TRIGGER `createProductionScheduleDate` 
AFTER UPDATE ON `artworkjobs_production` 
FOR EACH ROW 
IF ((OLD.ArtworkStatus = 'Approved' OR NEW.ArtworkStatus = 'Approved') 
    AND (OLD.isCompleted is NULL OR NEW.isCompleted is NULL) 
    AND (OLD.isCompleted = 'N' OR NEW.isCompleted = 'N') 
    AND (OLD.printDueDate <> '0000-00-00 00:00:00' OR NEW.printDueDate <> '0000-00-00 00:00:00') 
    AND (length(OLD.invoiceNumber) > 0) OR (length(NEW.invoiceNumber) > 0) 
    AND (OLD.importance > 0) OR NEW.importance > 0) AND (OLD.quantity > 0 OR NEW.quantity > 0) 
THEN SET originalProductionDueDate = now() 
END IF; 

我收到的错误是:处理您的请求

一个或多个错误发生: 下面的查询失败:<SQL query as stated above>

MySQL说:#1193 - 未知系统变量 'originalProductionDueDate'

originalProductionDueDate不过是一个正确的字段。 :(

createProductionScheduleDate是触发器的名称,表的不 表是artworkjobs_production这点我定义在这里:。

CREATE TRIGGER createProductionScheduleDate 
     AFTER UPDATE ON artworkjobs_production 
+0

请添加表'createProductionScheduleDate'的定义。 – FDavidov

+0

@FDavidov这是触发器的名称而不是表格。该表是artworkjobs_production。我在这里定义了:'CREATE TRIGGER createProductionScheduleDate AFTER UPDATE ON artworkjobs_production' –

+0

OOPSS !!!当然!!!对不起,这个错误。 – FDavidov

回答

1

如果要更改该行一列中的值这催生了扳机,使用

SET NEW.originalProductionDueDate = now(); 

但是你不能在更改NEW.<column>值触发后该行已经被更新,那么你必须做一个BEFORE触发器。

+0

现在感谢您的测试。 –

+0

这是问题所在。我正在考虑后退,认为行更新会在其他项目得到满足之后发生。现在对我来说非常有意义! –