我必须在表格 proyect 中创建一个触发器,以检查该项目的所有测试是否已准备好'。如果所有这些都准备就绪,我需要搜索这个项目并将项目状态设置为“准备就绪”。如果没有,不完整。
我知道我需要为UPDATE创建一个触发器,为INSERT创建另一个触发器。我已经计划了这样的事情,但是我无法使它发挥作用。
我创建了这个解决方案,如果该项目的测试总数低于该项目的测试准备数,那么proyect就没有准备好。如果两者都是平等的,那么proyect就准备好了。
我不知道为什么它不起作用:
CREATE TRIGGER update-proyect
AFTER INSERT ON tests
FOR EACH ROW
SET @total = select COUNT(*)
from tests
where IdProyect= NEW.IdProyect;
SET @ready = select COUNT(*)
from prueba
from tests
where IdProyect= NEW.IdProyect
AND status = 'ready';
IF (@total == @ready)
UPDATE proyect SET status = 'Ready' WHERE IdProyect = NEW.IdProyect;
ELSE
UPDATE proyect SET status = 'Incomplete' WHERE IdProyect = NEW.IdProyect;
END IF;
答案 0 :(得分:1)
大量错误update-proyect是对update_proyect的无效触发器名称更改,如果触发器中有多个语句,则必须将它们包含在begin和end语句中,必须在set中包含select之后的select大括号,mysql中没有==比较关系运算符使用=或null safe equals< =&gt ;, if语句必须有then语句。 这至少是语法。
DROP TRIGGER IF EXISTS update_proyect;
DELIMITER $$
CREATE TRIGGER update_proyect
AFTER INSERT ON tests
FOR EACH ROW
BEGIN
SET @total = (select COUNT(*)
from tests
where IdProyect= NEW.IdProyect
);
SET @ready = (select COUNT(*)
from prueba
#from tests
where IdProyect= NEW.IdProyect
AND status = 'ready'
);
IF (@total = @ready) THEN
UPDATE proyect SET status = 'Ready' WHERE IdProyect = NEW.IdProyect;
ELSE
UPDATE proyect SET status = 'Incomplete' WHERE IdProyect = NEW.IdProyect;
END IF;
END $$
DELIMITER ;