gpt4 book ai didi

MySQL 触发器根据插入和存储的值更新表

转载 作者:行者123 更新时间:2023-11-29 10:31:30 24 4
gpt4 key购买 nike

我必须在表项目中创建一个触发器,以检查项目的所有测试是否已“准备就绪”。如果它们都准备好了,我需要搜索项目并将项目的状态设置为“就绪”。如果没有,则不完整。

我知道我需要为更新创建一个触发器,为插入创建另一个触发器。我已经计划了这样的事情,但我无法实现它。

我创建了这个解决方案,如果该项目的测试总数低于该项目准备好的测试数量,则该项目尚未准备好。如果两者相等,则项目准备就绪。

我不知道为什么它不起作用:

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;

最佳答案

大量错误 update-proyect 是一个无效的触发器名称更改为 update_proyect,如果触发器中有超过 1 个语句,则它们必须包含在 begin 和 end 语句中,必须将 set 之后的 select 包含在大括号,mysql中没有==比较关系运算符,要么使用=,要么使用null safe equals <=>,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 ;

关于MySQL 触发器根据插入和存储的值更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47344515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com