尝试将if语句放入触发器时,为什么会出现语法错误?

时间:2020-03-22 19:54:10

标签: mysql if-statement triggers

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

触发:

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行的''附近使用的正确语法

我该如何解决?

1 个答案:

答案 0 :(得分:3)

您缺少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 ;