2016-05-23 8 views
1

こんにちは私は、他のテーブルに挿入した後、あるテーブルでいくつかのトリガーを更新しようとしていますが、エラーが表示されます。 2つのテーブルは同じフィールドと同じ名前を持ちます。挿入後のエラートリガーの挿入

ここにコードがあります。

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 BEGIN' on line 9 –

+1

ああ、それぞれのブロックを区切り文字で区切ります。 'END;' – Arulkumar

0

トリガーに複数のクエリが含まれている場合、トリガを定義する前に区切り文字を変更するだけで済みます。この場合、デフォルトのデリミタ;を使用してトリガ内のクエリを分離する必要がありますが、ここでトリガ定義を終了することを間違って思うでしょう。これには、トリガー内のクエリのブロックの周りに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を使用していますが、私は同じアクション時間とイベントに対して2つのトリガーを使用しているとは思いません。 –

+0

テスト中に1つまたは複数のトリガーを正常に追加しましたが、今度は同じトリガーをもう一度追加しようとしていますか?再度コマンドを実行する前に、それぞれのトリガーに対して 'DROP TRIGGER IF EXISTS trigger_name;'を試してください。 –

+0

あなたの質問を編集して答えが出た後は、まったく別の質問をすることは大いに役立ちません。これは、同じ問題を抱える将来の訪問者がそれを見つけることができないか、または答えが意味をなさないことを意味します。あなたがそれを編集し、元の素材をそのまま残しておくと、質問の一番下にアップデートを追加する方がいいと思います。 –