2013-02-08 20 views
8

तो, मेरे पास एक MySQL तालिका है, जिसका नाम कर्मचारियों है।अद्यतन ट्रिगर से पहले MySQL - मूल्य बदलें

ID name meta 
0  jack ok 
1  anne del 

मैं एक ट्रिगर लिखना चाहता हूं जो एक पंक्ति को रोकता है जहां मेटा = 'डेल' मेटा फ़ील्ड को अपडेट करने के लिए। तो, अगर मैं ऐसा:

UPDATE employees SET meta = 'busy' WHERE ID = 0 

पंक्ति अद्यतन किया जाना चाहिए और मेटा 'व्यस्त'

लेकिन जब मैं करना होगा:

UPDATE employees SET meta = 'busy' WHERE ID = 1 

मेटा क्षेत्र अभी भी 'होना चाहिए डेल '

मैंने कोशिश की:

delimiter $$ 
CREATE TRIGGER updateEmployees 
BEFORE UPDATE ON employees 
FOR EACH ROW 
BEGIN 
    IF OLD.meta = 'del' THEN 
     NEW.meta = 'del' 
    END IF; 
END$$ 
delimiter ; 

लेकिन MySQL एक वाक्यविन्यास त्रुटि के साथ देता है। कोई विचार?

उत्तर

3

आप ;

delimiter $$ 
CREATE TRIGGER updateEmployees 
BEFORE UPDATE ON employees 
FOR EACH ROW 
BEGIN 
    IF OLD.meta = 'del' THEN 
     NEW.meta = 'del'; -- << here 
    END IF; 
END$$ 
delimiter ; 

TRIGGER बुराई है याद किया।

एक वैकल्पिक गति प्रदान करने के लिए एक और शर्त AND

UPDATE employees 
SET meta = 'busy' 
WHERE ID = 1 AND meta <> 'del' 
+0

ट्रिगर अभी भी काम नहीं करता है लेकिन मैंने आपके दूसरे समाधान के साथ जाने का फैसला किया है। धन्यवाद! –

+0

आपका स्वागत है ': डी' –

+14

ट्राइगर बुरा क्यों है? यह एक बहुत शक्तिशाली उपकरण है जो डाटाबेस प्रशासक डेटा अखंडता नियमों को लागू करने के लिए उपयोग कर सकते हैं। ऐसे माहौल में जहां डेटा अखंडता सर्वोपरि है (उदाहरण के लिए कॉर्पोरेट रिकॉर्ड) ट्रिगर्स एप्लिकेशन डेवलपर्स पर भी लागू करने के लिए एक मूल्यवान संसाधन प्रदान करते हैं। मैं अब अपने व्यक्तिगत विकास में ट्रिगर्स का उपयोग करता हूं क्योंकि वे मेरे लिए एक छोटे से प्रदर्शन ओवरहेड पर डेटा अखंडता को लागू करते हैं, जो वही जांच कर रहे एप्लिकेशन द्वारा वैसे भी खो जाएगा ... – lassombra

16

आप सेट खंड जोड़ने के लिए भूल गया जोड़कर है। इस तरह यह वास्तव में मूल्य को नहीं बदलता है।

delimiter $$ 
CREATE TRIGGER updateEmployees 
BEFORE UPDATE ON employees 
FOR EACH ROW 
BEGIN 
    IF OLD.meta = 'del' THEN 
     SET NEW.meta = 'del'; 
    END IF; 
END$$ 
delimiter ; 
संबंधित मुद्दे