2009-10-17 89 views
11

我想設置一個觸發器,以便如果在更新時預測字段爲3,則觸發器將值更改爲4並將其保存在數據庫中。觸發器在下面。mysql觸發器存儲的觸發器已被使用的語句調用存儲的觸發器

出於某種原因,我不斷收到一個錯誤說:

#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. 

這是樹立正確的方法是什麼?

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 ; 

回答

41

MySQL觸發器無法操作它們分配給的表。所有其他主要的數據庫管理系統都支持這個功能,所以希望MySQL能很快加入這個支持。

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

+0

謝謝你:) - 你幫我 – Skeen 2011-09-22 10:38:51

+1

和我,這是一個非常惱人的錯誤 – jdborg 2011-11-24 10:56:14

+8

每天我討厭mysql更多 – 2012-04-16 07:13:50

0

此外,你需要確保你沒有其他程序或執行這個特殊的程序被分配給在桌子上更新或你在遞歸結束的功能。例如

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; 

這將以遞歸結束,因此要小心現有的存儲過程和函數。

相關問題