2009-10-17 17 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

+1

की मदद की और मैं, यह एक बहुत ही परेशान करने वाली बग – jdborg

+8

प्रतिदिन है, मैं रोज़ाना mysql से नफरत करता हूं –

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; 

के लिए यह एक प्रत्यावर्तन में समाप्त इसलिए मौजूदा संग्रहित प्रक्रियाओं और कार्यों में सावधान रहना होगा।

संबंधित मुद्दे