代码之家  ›  专栏  ›  技术社区  ›  Nahuel Ovejero

基于插入值和存储值更新表的MySQL触发器

  •  0
  • Nahuel Ovejero  · 技术社区  · 7 年前

    我必须在表中创建触发器 项目

    我知道我需要为更新创建一个触发器,为插入创建另一个触发器。我已经计划好了这样的事情,但我不能让它成功。

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

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

    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;
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   P.Salmon    7 年前

    这至少是语法。

    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 ;