2017-06-07 54 views
0

我在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 <> NEW.id_ubicacion)THEN'

谢谢。

回答

0
  1. 检查DECLARE语句上面的触发器内是否存在任何其他语句。如果是这样,那么它可能会抛出错误。

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

实施例:

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 ;

+0

我在phpmyadmin触发器的定义字段中配置它。我在语法结尾添加了'DELIMITER //'和'DELIMITER;',但它显示了相同的错误。 –