2010-12-28 46 views
14

Làm cách nào để cập nhật cột của bảng trong trình kích hoạt sau khi cập nhật trên cùng một bảng?
Dưới đây là cò:Cập nhật bảng kích hoạt sau khi cập nhật trên cùng một bảng

 

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) 
 

Bây giờ khi tôi cập nhật bảng như

 

UPDATE products_score SET votes_1 = 5 WHERE id = 0 
 

này không hoạt động, như tôi nhận được như sau:

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

Vậy làm thế nào trên trái đất Tôi có thể làm việc này?

Trả lời

26

Nếu bạn thay đổi kích hoạt của bạn để BEFORE thay vì AFTER bạn có thể làm điều đó như thế này:

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

Câu trả lời hay nhất – jdborg

7

Bạn không thể có điều này theo cách mà bạn đã thiết lập bởi vì một kích hoạt không thể truy vấn hàng khác của cùng một bảng mà nó được xác định trên. istead bạn có thể sử dụng một Trước khi Update Kích hoạt toachieve những gì bạn muốn:

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; 

Hoặc sử dụng một thủ tục lưu trữ để cập nhật bảng.

+0

cùng một thông báo lỗi gọi một thủ tục được lưu trữ bên trong trình kích hoạt sau khi cập nhật – vladiastudillo

Các vấn đề liên quan