2010-12-28 16 views
14

Tablodaki sütunu, aynı tablodaki güncellemeden sonra nasıl tetikleyebilirim? YaniTabloda aynı tablodan sonra tetiklendikten sonra tablo güncelleniyor

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

nasıl yeryüzünde: Aşağıdaki olsun ben, bu işe yaramazsa

 

UPDATE products_score SET votes_1 = 5 WHERE id = 0 
 

gibi tablo güncelleştirme Şimdi

 

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) 
 

:
İşte tetik Bunu işe alabilir miyim? yerine AFTER ait BEFORE için tetiği değiştirirseniz

cevap

26

bunu şöyle yapabilirsiniz: Bir tetikleyici diğer satırları sorgulamak çünkü

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

Mükemmel yanıt – jdborg

7

Sen Kurduğunuz bu şekilde olamaz tanımlandığı aynı tablo.

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; 

Veya tablosunu güncelleştirmek için bir saklı yordamı kullanın: Istead istediğini toachieve Güncelleme Tetikleyici önce bir kullanabilir.

+0

güncelleştirmeden sonra tetikleyici içindeki saklı yordamı çağırırken aynı hata iletisi – vladiastudillo

İlgili konular