2016-05-23 235 views
1

嗨,大家好,我試圖做一些觸發器更新後插入其他表中的一個表中,但它報告我一個錯誤。兩個表具有相同的字段和相同的名稱。錯誤觸發器插入後插入

這是代碼。

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' 

謝謝你的建議。

+0

看看這個[發表](http://stackoverflow.com/a/19020753/2451726) – Arulkumar

回答

2

從所有END;中刪除;並應用分隔符END//將解決您的問題。

由於您已經爲INSERT/UPDATE聲明放置了正確的;,因此無需再將它放在END;中。

+0

你是這個意思嗎? (見編輯)。它不會對這個錯誤進行更改。 #1064 - 你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在正確的語法附近使用'CREATE TRIGGER Insertar_Bares_Private AFTER INSERT ON Bares FOR EACH ROW BEGIN'在第9行 –

+1

哦,可以嘗試設置每個塊以您的分隔符結束END //'代替'END;' – Arulkumar

0

如果觸發器包含多個查詢,則只需在定義觸發器之前更改分隔符。這是因爲在這種情況下,您需要使用默認分隔符;來分隔觸發器中的查詢,但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 ... 
+0

好的,謝謝,但現在報告錯誤(請參閱編輯)。我正在使用MySQL 5.5.42,但我不認爲我在同一個動作時間和事件中使用了兩個觸發器。 –

+0

您是否在測試過程中成功添加了一個或多個觸發器,現在又試圖再次添加相同的觸發器?在再次運行命令之前,對每個觸發器嘗試'DROP TRIGGER IF EXISTS trigger_name;'。 –

+0

在回答問題後,編輯問題以詢問完全不同的問題並不是很有幫助。這意味着未來的訪問者如果遇到同樣的問題,將無法找到它,否則答案將無法理解。我認爲,編輯它時最好在問題的底部添加更新,並保留原始材料。 –