2009-10-17 34 views
11

Tôi muốn thiết lập trình kích hoạt để nếu cập nhật trường dự đoán là = 3 thì kích hoạt sẽ thay đổi giá trị thành 4 và lưu nó vào cơ sở dữ liệu. Kích hoạt bên dưới.trigger kích hoạt được kích hoạt mysql đã được sử dụng bởi câu lệnh gọi kích hoạt được lưu trữ

Đối với một số lý do tôi tiếp tục nhận được một lỗi nói:

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

Đây có phải là thiết lập đúng cách?

delimiter $$ 
CREATE TRIGGER no_BoW BEFORE UPDATE ON t FOR EACH ROW 
BEGIN set @prediction = new.prediction; 
UPDATE t SET t.prediction = (SELECT IF(@prediction = '3', '4', @prediction)) WHERE t.event_id = new.event_id AND t.price_tier = new.price_tier; END; 
$$ delimiter ; 

Trả lời

41

Trình kích hoạt MySQL không thể thao tác bảng được gán cho chúng. Tất cả các DBMS lớn khác đều hỗ trợ tính năng này để hy vọng rằng MySQL sẽ bổ sung thêm sự hỗ trợ này sớm.

http://forums.mysql.com/read.php?99,122354,240978#msg-240978

+0

Cảm ơn bạn :) - Bạn đã giúp tôi – Skeen

+1

Và tôi, đó là một lỗi rất khó chịu – jdborg

+8

mỗi ngày tôi ghét mysql hơn –

0

Ngoài ra, bạn cần đảm bảo rằng bạn không có các thủ tục hoặc chức năng mà thực hiện cập nhật trên bàn rằng thủ tục đặc biệt này được gán cho hoặc bạn kết thúc trong một đệ quy khác. Ví dụ:

create trigger trig1 After update on table1 FOR EACH ROW 
BEGIN 
UPDATE table2 SET colum1 = column1 + 1 
END; 

create trigger trig2 After update on table2 FOR EACH ROW 
BEGIN 
UPDATE table1 SET colum2 = column2 + 1 
END; 

Điều này sẽ kết thúc trong đệ quy vì vậy hãy cẩn thận với các thủ tục và chức năng hiện có được lưu trữ.

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