MySQL
चलाता है
खोज…
वाक्य - विन्यास
- बनाएँ [DEFINER = {उपयोगकर्ता | CURRENT_USER}] TRIGGER ट्रिगर_नाम ट्रिगर_टाइम ट्रिगर_बनाएँ पर tbl_name के लिए प्रत्येक पंक्ति [ट्रिगर_ऑर्डर] ट्रिगर_बॉडी
- ट्रिगर_टाइम: {पहले से | उपरांत }
- trig_event: {INSERT | अद्यतन | DELETE}
- ट्रिगर_ऑर्डर: {FOLLOWS | PRECEDES} other_trigger_name
टिप्पणियों
यदि आप पहले से ही दूसरों पर ट्रिगर का उपयोग करते हैं, तो दो बिंदुओं पर आपका ध्यान आकर्षित करने की आवश्यकता है:
हर एक के लिए
FOR EACH ROW
के लिए वाक्यविन्यास का अनिवार्य हिस्सा है
आप ओरेकल की तरह एक बयान ट्रिगर (क्वेरी द्वारा एक बार) नहीं कर सकते। यह एक वास्तविक लापता सुविधा की तुलना में अधिक प्रदर्शन से संबंधित मुद्दा है
निर्माता या प्रतिनिधि व्यापारी
CREATE OR REPLACE
MySQL द्वारा समर्थित नहीं है
MySQL इस सिंटैक्स की अनुमति नहीं देता है, आपके पास निम्न का उपयोग करने के बजाय है:
DELIMITER $$
DROP TRIGGER IF EXISTS myTrigger;
$$
CREATE TRIGGER myTrigger
-- ...
$$
DELIMITER ;
सावधान रहें, यह परमाणु लेनदेन नहीं है :
- यदि आप
CREATE
विफल होते हैं तो आप पुराने ट्रिगर को ढीला कर देंगे - एक भारी लोड पर, अन्य ऑपरेशन
DROP
औरCREATE
बीच हो सकते हैं,LOCK TABLES myTable WRITE;
उपयोग करेंLOCK TABLES myTable WRITE;
पहले डेटा असंगति औरUNLOCK TABLES;
से बचने के लिएUNLOCK TABLES;
तालिका जारी करने के लिएCREATE
बाद
बेसिक ट्रिगर
तालिका बनाएं
mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
Query OK, 0 rows affected (0.03 sec)
ट्रिगर बनाएँ
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
-> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
क्रिएट ट्राइगर स्टेटमेंट ins_sum नाम का ट्रिगर बनाता है जो अकाउंट टेबल के साथ जुड़ा होता है। इसमें क्लॉस भी शामिल हैं जो ट्रिगर एक्शन टाइम, ट्रिगरिंग इवेंट को निर्दिष्ट करते हैं और ट्रिगर सक्रिय होने पर क्या करना है
मान डालें
ट्रिगर का उपयोग करने के लिए, संचायक चर (@sum) को शून्य पर सेट करें, एक INSERT विवरण निष्पादित करें, और फिर देखें कि चर के बाद क्या मूल्य है:
mysql> SET @sum = 0;
mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
mysql> SELECT @sum AS 'Total amount inserted';
+-----------------------+
| Total amount inserted |
+-----------------------+
| 1852.48 |
+-----------------------+
इस मामले में, INSERT के बयान के बाद @sum का मूल्य 14.98 + 1937.50 - 100, या 1852.48 है।
ड्रॉप ट्रिगर
mysql> DROP TRIGGER test.ins_sum;
यदि आप एक तालिका छोड़ते हैं, तो तालिका के लिए कोई ट्रिगर भी गिरा दिया जाता है।
ट्रिगर्स के प्रकार
समय
दो ट्रिगर एक्शन टाइम संशोधक हैं:
- अनुरोध को निष्पादित करने
BEFORE
ट्रिगर सक्रिय हो जाता है, -
AFTER
परिवर्तन के बाद ट्रिगर आग।
प्रेरित करने वाली घटना
ऐसी तीन घटनाएं हैं जो ट्रिगर से जुड़ी हो सकती हैं:
-
INSERT
-
UPDATE
-
DELETE
ट्रिगर का उदाहरण डालने से पहले
DELIMITER $$
CREATE TRIGGER insert_date
BEFORE INSERT ON stack
FOR EACH ROW
BEGIN
-- set the insert_date field in the request before the insert
SET NEW.insert_date = NOW();
END;
$$
DELIMITER ;
अद्यतन ट्रिगर उदाहरण से पहले
DELIMITER $$
CREATE TRIGGER update_date
BEFORE UPDATE ON stack
FOR EACH ROW
BEGIN
-- set the update_date field in the request before the update
SET NEW.update_date = NOW();
END;
$$
DELIMITER ;
डिलीट ट्रिगर उदाहरण के बाद
DELIMITER $$
CREATE TRIGGER deletion_date
AFTER DELETE ON stack
FOR EACH ROW
BEGIN
-- add a log entry after a successful delete
INSERT INTO log_action(stack_id, deleted_date) VALUES(OLD.id, NOW());
END;
$$
DELIMITER ;