【问题标题】:Error creating trigger in MySql [duplicate]在 MySql 中创建触发器时出错 [重复]
【发布时间】:2016-01-09 04:27:15
【问题描述】:

我在 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 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 4 行的 '' 附近使用

第 4 行是 'DECLARE ...'

提前致谢

【问题讨论】:

  • 问题很可能是需要指定分隔符;我标记为重复的问题的答案向您展示了如何解决它(下面的答案也是如此)。我忘记了我的重复标志会立即关闭问题。如果建议的解决方案不适合您,请发表评论,我将投票重新提出您的问题。

标签: mysql sql triggers


【解决方案1】:

您可能只需要一个分隔符语句(显然没有其他问题):

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

【讨论】:

    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2015-02-27
    相关资源
    最近更新 更多