错误触发器插入后插入
嗨,大家好,我试图做一些触发器更新后插入其他表中的一个表中,但它报告我一个错误。两个表具有相同的字段和相同的名称。错误触发器插入后插入
这是代码。
DELIMITER //
CREATE TRIGGER Insertar_Bares_Private AFTER INSERT ON Bares
FOR EACH ROW
BEGIN
INSERT INTO Bares_Private (nombrebar, direccion) VALUES (new.nombrebar, new.direccion);
END//
CREATE TRIGGER Insertar_Categorias_Private AFTER INSERT ON Categorias
FOR EACH ROW
BEGIN
INSERT INTO Categorias_Private (nombrecategoria) VALUES (new.nombrecategoria);
END//
CREATE TRIGGER Insertar_Productos_Private AFTER INSERT ON Productos
FOR EACH ROW
BEGIN
INSERT INTO Productos_Private (nombreproducto, idcategoria, descripcion, precio, imagen) VALUES (new.nombreproducto, new.idcategoria, new.descripcion, new.precio, new.imagen);
END//
-- Triggers al actualizar
CREATE TRIGGER Actualizar_Usuarios_Private AFTER UPDATE on Usuarios
for each ROW
BEGIN
UPDATE Usuarios_Private
SET nombreusuario=new.nombreusuario, contrasenia=new.contrasenia, email=new.email, telefono=new.telefono
where idusuario=new.idusuario;
END//
CREATE TRIGGER Actualizar_Bares_Private AFTER UPDATE on Bares
for each ROW
BEGIN
UPDATE Bares_Private
SET nombrebar=new.nombrebar, direccion=new.direccion
where idbar=new.idbar;
END//
CREATE TRIGGER Actualizar_Categorias_Private AFTER UPDATE on Categorias
for each ROW
BEGIN
UPDATE Categorias_Private
SET nombrecategoria=new.nombrecategoria
where idcategoria=new.idcategoria;
END//
CREATE TRIGGER Actualizar_Productos_Private AFTER UPDATE on Productos
for each ROW
BEGIN
UPDATE Productos_Private
SET nombreproducto=new.nombreproducto, idcategoria=new.idcategoria, descripcion=new.descripcion, precio=new.precio, imagen=new.imagen
where idproducto=new.idproducto;
END//
DELIMITER ;
这里是错误报告。
#1235 - This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
谢谢你的建议。
从所有END;
中删除;
并应用分隔符END//
将解决您的问题。
由于您已经为INSERT
/UPDATE
声明放置了正确的;
,因此无需再将它放在END;
中。
你是这个意思吗? (见编辑)。它不会对这个错误进行更改。 #1064 - 你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,在正确的语法附近使用'CREATE TRIGGER Insertar_Bares_Private AFTER INSERT ON Bares FOR EACH ROW BEGIN'在第9行 –
哦,可以尝试设置每个块以您的分隔符结束END //'代替'END;' – Arulkumar
如果触发器包含多个查询,则只需在定义触发器之前更改分隔符。这是因为在这种情况下,您需要使用默认分隔符;
来分隔触发器中的查询,但MySQL客户端会错误地认为您的意思是在此处终止触发器定义。这还需要您在触发器中的查询块周围使用BEGIN
... END
。
DELIMITER //
CREATE TRIGGER Insertar_Usuarios_Private AFTER INSERT ON Usuarios
FOR EACH ROW
BEGIN
INSERT INTO Usuarios_Private (nombreusuario, contrasenia, email,telefono) VALUES (new.nombreusuario, new.contrasenia, new.email, new.telefono);
END//
CREATE TRIGGER Insertar_Bares_Private AFTER INSERT ON Bares
FOR EACH ROW
BEGIN
INSERT INTO Bares_Private (nombrebar, direccion) VALUES (new.nombrebar, new.direccion);
END//
-- and so on ...
DELIMITER ;
但是,您的触发器只包含一个查询。因此,您可以完全取消分隔符和BEGIN
... END
块。
CREATE TRIGGER Insertar_Usuarios_Private AFTER INSERT ON Usuarios
FOR EACH ROW
INSERT INTO Usuarios_Private (nombreusuario, contrasenia, email,telefono) VALUES (new.nombreusuario, new.contrasenia, new.email, new.telefono);
CREATE TRIGGER Insertar_Bares_Private AFTER INSERT ON Bares
FOR EACH ROW
INSERT INTO Bares_Private (nombrebar, direccion) VALUES (new.nombrebar, new.direccion);
-- and so on ...
好的,谢谢,但现在报告错误(请参阅编辑)。我正在使用MySQL 5.5.42,但我不认为我在同一个动作时间和事件中使用了两个触发器。 –
您是否在测试过程中成功添加了一个或多个触发器,现在又试图再次添加相同的触发器?在再次运行命令之前,对每个触发器尝试'DROP TRIGGER IF EXISTS trigger_name;'。 –
在回答问题后,编辑问题以询问完全不同的问题并不是很有帮助。这意味着未来的访问者如果遇到同样的问题,将无法找到它,否则答案将无法理解。我认为,编辑它时最好在问题的底部添加更新,并保留原始材料。 –
看看这个[发表](http://*.com/a/19020753/2451726) – Arulkumar