ऊपर दिखाया गया ट्रिगर ठीक है।
संपादित करें: जब आप phpMyAdmin के GUI में एक ट्रिगर बनाते हैं, तो आपको केवल परिभाषा में ट्रिगर का मुख्य भाग दर्ज करना होगा फलक, दूसरे शब्दों में भाग BEGIN...END
.
ऐसा इसलिए है क्योंकि phpMyAdmin चतुर होने की कोशिश करने जा रहा है और आपके द्वारा दर्ज किए गए अन्य तत्वों (नाम, तालिका, समय, घटना) के आधार पर आपके लिए ट्रिगर हेडर लिखने जा रहा है।
यहाँ phpMyAdmin में ट्रिगर को परिभाषित करने का सही तरीका है:
अगर आप CREATE TRIGGER...
. लिखते हैं शरीर के अंदर शीर्ष लेख, यह MySQL को भ्रमित करेगा क्योंकि यह CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
देखेगा . इससे MySQL को लगता है कि आप एक ट्रिगर को परिभाषित कर रहे हैं जिसका पहला स्टेटमेंट CREATE TRIGGER
. है ।
आपके मूल प्रश्न के अतिरिक्त मुद्दे के रूप में, मैं ट्रिगर के मुख्य भाग में कुछ बदलावों का सुझाव दूंगा:
CREATE TRIGGER Update_Last_Transit_Status AFTER INSERT ON Delivery
FOR EACH ROW
BEGIN
UPDATE Transportation
INNER JOIN Transit ON Transit.Transportation_ID = Transportation.ID
INNER JOIN Route ON Transit.ID = Route.Transit_ID
SET Transportation.Status = 'Dispatched'
WHERE Route.Delivery_ID = NEW.ID
AND Transportation.Status = 'In Branch';
END
परिवर्तन:
- संदर्भ
NEW.ID
Delivery.ID
. के बजाय । - एसक्यूएल-92 का प्रयोग करें
JOIN
SQL-89 "अल्पविराम शैली" के बजाय सिंटैक्स जुड़ता है। - बहु-तालिका का उपयोग करें
UPDATE
जॉइन के साथ,EXISTS
. के बजाय सहसंबद्ध सबक्वेरी के साथ। - डबल-कोट्स के बजाय स्ट्रिंग्स के लिए सिंगल-कोट्स का उपयोग करें।
UPDATE
समाप्त करें अर्धविराम के साथ कथन।