创建触发器phpmyadmin中的问题

时间:2017-06-07 19:12:42

标签: mysql triggers phpmyadmin

我在phpmyadmin中创建触发器时遇到问题。这是我的语法:

DECLARE n_ubicacion VARCHAR(45) DEFAULT '';

IF (OLD.id_ubicacion <> NEW.id_ubicacion) THEN 
SELECT ubicacion INTO n_ubicacion FROM ubicacions WHERE id = NEW.id_ubicacion LIMIT 1;
END IF;

INSERT INTO historico_equipos(usuario, id_equipo, estado, ubicacion, empleado, f_asignacion, created_at) VALUES (CURRENT_USER(), NEW.id, NEW.id_estado, n_ubicacion, NEW.id_empleado, NEW.f_asignacion, CURRENT_DATE())

我不知道问题出在哪里。在phpmyadmin中显示下一个错误:

“DECLARE n_ubicacion VARCHAR(45)DEFAULT”附近的语法有问题; IF(OLD.id_ubicacion&lt;&gt; NEW.id_ubicacion)那么'

感谢。

1 个答案:

答案 0 :(得分:0)

  1. 检查DECLARE语句上方的Trigger中是否存在任何其他语句。如果是这样,那么它可能会抛出错误。

  2. 检查分隔符。默认情况下,MySQL的分隔符为';'。因此,在看到第一个';'时,您的查询将会中断。因此在创建触发器之前使用一些其他分隔符。

  3. 示例:

    DELIMITER //
    
    CREATE TRIGGER ...
    BEGIN
    DECLARE n_ubicacion VARCHAR(45) DEFAULT '';
    IF (OLD.id_ubicacion <> NEW.id_ubicacion) THEN 
        SELECT ubicacion INTO n_ubicacion FROM ubicacions WHERE id =
                                           NEW.id_ubicacion LIMIT 1;
    END IF;
    INSERT INTO historico_equipos(usuario, id_equipo, estado, ubicacion, empleado, f_asignacion, created_at) VALUES (CURRENT_USER(), NEW.id, NEW.id_estado, n_ubicacion, NEW.id_empleado, NEW.f_asignacion, CURRENT_DATE())
    END//
    

    然后再次将DELIMITER更改为默认值。

    DELIMITER ;