【问题标题】:Why do I get a syntax error when trying to put an if statement in a trigger?为什么在尝试将 if 语句放入触发器时会出现语法错误?
【发布时间】:2020-03-22 19:54:10
【问题描述】:

我需要使用触发器在数据库中插入不同的数据,具体取决于先前对表进行的更新,尽管由于某种原因我不断收到语法错误。我检查了很多与我类似的问题,但我的代码仍然看起来不错。

触发器:

DELIMITER $$

CREATE TRIGGER update_history
AFTER UPDATE ON product
FOR EACH ROW
BEGIN
IF OLD.amount - NEW.amount > OLD.amount THEN
    INSERT INTO product_history (amount_of_new_products, product_id, user_id, updated_on, type_of_change)
    VALUES ((NEW.amount - OLD.amount), NEW.id, NEW.user_id, now(), 'order');
ELSE
    INSERT INTO product_history (amount_of_new_products, product_id, user_id, updated_on, type_of_change)
    VALUES ((NEW.amount - OLD.amount), NEW.id, NEW.user_id, now(), 'update');
END$$

DELIMITER ;

错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 11 行的 '' 附近使用

我该如何解决这个问题?

【问题讨论】:

    标签: mysql if-statement triggers


    【解决方案1】:

    您缺少一个 END IF。

    缩进你的代码,这样你就可以很容易地发现它。

    DELIMITER $$
    
    CREATE TRIGGER update_history
    AFTER UPDATE ON product
    FOR EACH ROW
    BEGIN
        IF OLD.amount - NEW.amount > OLD.amount THEN
            INSERT INTO product_history (amount_of_new_products, product_id, user_id, updated_on, type_of_change)
            VALUES ((NEW.amount - OLD.amount), NEW.id, NEW.user_id, now(), 'order');
        ELSE
            INSERT INTO product_history (amount_of_new_products, product_id, user_id, updated_on, type_of_change)
            VALUES ((NEW.amount - OLD.amount), NEW.id, NEW.user_id, now(), 'update');
        ENd IF;
    END$$
    
    DELIMITER ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多