2017-08-24 140 views
0

我想在更新记录后更新一列“状态”,并且只有在四个特定列不为空时。这是我的触发器,但它不能正常工作。更新后的MySQL触发器 - 如果列不为空,则更新

CREATE TRIGGER `after_thesis_rate_upade` 
AFTER UPDATE ON `theses` 
FOR EACH ROW IF (new.promoterRate IS NOT NULL AND new.promoterNote IS NOT NULL AND new.reviewerNote IS NOT NULL AND new.reviewerRate IS NOT NULL) 
THEN 
UPDATE theses SET new.status="Oceniona" WHERE old.id=new.id; 
END IF; 

当我更新这些列中的状态栏仍是此相同,在尝试变化值在MySQL phpMyAdmin的抛错误“无法改变,因为有设置触发器”。你能告诉我什么是错的吗?

回答

0

您不会修改在触发器中触发触发器的表;只需在NEW.fieldnames上使用SET声明即可。

IF some_condition THEN 
    SET NEW.blah2 = 'something or other'; 
END IF; 
+0

我做了这个SET new.status = “Oceniona”;它会抛出错误#1362 - 在触发后不允许更新NEW行 –

+0

可能应该是一个'BEFORE UPDATE'触发器然后; 'AFTER'意味着数据已被写入。 'SET OLD.status'_might_可以在'AFTER UPDATE'中工作,但是我没有处理触发器就没有足够的可以确定而不需要自己尝试。 – Uueerdo

+0

好吧,只是看触发文档的另一个问题,它看起来只有NEW字段可以设置,并且只在BEFORE [INSERT | UPDATE]触发器。 – Uueerdo