2010-12-28 11 views
14

Wie kann ich die Spalte der Tabelle in einem Trigger nach der Aktualisierung in derselben Tabelle aktualisieren?
Hier ist der Auslöser:Aktualisieren der Tabelle im Trigger nach der Aktualisierung in derselben Tabelle

 

CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score 
FOR EACH ROW 
    UPDATE 
     products_score 
    SET 
     products_score.votes_total = 
      (SELECT 
       (votes_1 + votes_2 + votes_3 + votes_4 + votes_5) 
      FROM 
       products_score 
      WHERE 
       id = new.id) 
 

Nun, wenn ich die Tabelle aktualisieren, wie

 

UPDATE products_score SET votes_1 = 5 WHERE id = 0 
 

dies nicht funktioniert, wie ich folgendes erhalten:

#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

So wie auf der Erde Ich kann das zur Arbeit bringen?

Antwort

26

Wenn Sie Ihren Auslöser BEFORE statt AFTER ändern könnten Sie es wie folgt tun:

CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score 
FOR EACH ROW 
BEGIN 
    SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5 
END 
; 
+1

Ausgezeichnete Antwort – jdborg

7

Sie können nicht haben diese so, wie Sie Setup haben, weil ein Trigger nicht anderen Zeilen der Abfrage können gleiche Tabelle, auf der es definiert ist. Istead können Sie ein Vor-Update-Trigger toachieve verwenden, was Sie wollen:

CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW  
BEGIN 
    SET NEW.votes_total = NEW.votes_1 + NEW.votes_2 + NEW.votes_3 + NEW.votes_4 + NEW.votes_5; 
END; 

oder eine gespeicherte Prozedur verwenden, um die Tabelle zu aktualisieren.

+0

gleiche Fehlermeldung Aufruf einer gespeicherten Prozedur in den Trigger nach dem Update – vladiastudillo

Verwandte Themen