खोज…


वाक्य - विन्यास

  • बनाएँ [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 ;


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow