mysql - 在 MySql 中创建触发器时出错

标签 mysql sql triggers

我在 MySql 数据库中创建此触发器时出错:

CREATE TRIGGER AggiornaQuantitaLotto AFTER UPDATE ON Lotti
 FOR EACH ROW
 BEGIN
    DECLARE Differenza INT DEFAULT 0;

    IF OLD.Quantita <> NEW.Quantita THEN
        SET Differenza = NEW.Quantita - OLD.Quantita;
        
        UPDATE Giacenze
        SET Totale = Totale + Differenza,
            Disponibile = Disponibile + Differenza
        WHERE CodP = NEW.CodP;
    END IF;
END;

我哪里出错了?错误消息显示:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4

第 4 行是“DECLARE ...”

提前致谢

最佳答案

您可能只需要一个分隔符语句(没有其他明显错误):

DELIMITER $$

CREATE TRIGGER AggiornaQuantitaLotto AFTER UPDATE ON Lotti
 FOR EACH ROW
 BEGIN
    DECLARE Differenza INT DEFAULT 0;

    IF OLD.Quantita <> NEW.Quantita THEN
        SET Differenza = NEW.Quantita - OLD.Quantita;

        UPDATE Giacenze
            SET Totale = Totale + Differenza,
                Disponibile = Disponibile + Differenza
        WHERE CodP = NEW.CodP;
    END IF;
END;
$$
DELIMITER ;

注意:我很想写这样的逻辑:

 BEGIN
    UPDATE Giacenze g
        SET Totale = Totale + (NEW.Quantita - OLD.Quantita),
            Disponibile = Disponibile + (NEW.Quantita - OLD.Quantita)
    WHERE g.CodP = NEW.CodP AND NEW.Quantita <> OLD.Quantita
 END;

这只是消除了if

关于mysql - 在 MySql 中创建触发器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33068476/

相关文章:

php - 当Web应用程序中的查询失败时,如何正确响应?

sql - 在 PostgreSQL 中没有主键的表用于

php - 从 PHP 代码创建触发器时出现语法错误

关于UPDATE的Mysql问题

通过字段连接两个表时,Python 不返回数据

sql - 如何从 SQL 中的日期获取日历季度

javascript - Fancybox 触发点击

javascript - 是什么导致 "drone"在以特定 Angular 转动时出现抖动?

MySQL - 组合两条记录,每条记录的不同字段

java - 获取 java.sql.SQLException : Operation not allowed after ResultSet closed ERROR while trying multiple queries