Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> MySql

MySQL ट्रिगर में 'प्रत्येक पंक्ति के लिए' कैसे काम करता है?


वास्तव में 'प्रत्येक पंक्ति के लिए' का अर्थ प्रत्येक मिलान वाली पंक्तियों के लिए है जो या तो अपडेट हो जाती हैं या हटा दी जाती हैं। दूसरे शब्दों में, हम कह सकते हैं कि ट्रिगर प्रत्येक पंक्ति पर लागू नहीं होता है, यह केवल प्रत्येक प्रभावित तालिका पंक्ति के लिए ट्रिगर बॉडी को निष्पादित करने के लिए कहता है। हम इसे निम्नलिखित उदाहरण से स्पष्ट कर सकते हैं -

उदाहरण

इस उदाहरण में, हम दो टेबल बना रहे हैं, नमूना और नमूना_रो प्रभावित, इस प्रकार है -

mysql> Create table Sample(id int, value varchar(20));
Query OK, 0 rows affected (0.47 sec)

mysql> Insert into Sample(id, value) values(100, 'same'),(101,
'Different'),(500, 'excellent'),(501, 'temporary');
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> Select * from Sample;
+------+-----------+
| id   | value     |
+------+-----------+
| 100  | same      |
| 101  | Different |
| 500  | excellent |
| 501  | temporary |
+------+-----------+
4 rows in set (0.00 sec)

mysql> Create table Sample_rowaffected(id int);
Query OK, 0 rows affected (0.53 sec)

mysql> Select Count(*) as ‘Rows Affected’ from sample_rowaffected;
+---------------+
| Rows Affected |
+---------------+
|             0 |
+---------------+
1 row in set (0.10 sec)

अब, हम एक ट्रिगर बनाएंगे जो निम्न तालिका 'नमूना' में किसी भी मान को हटाने से पहले ट्रिगर करता है -

mysql> Delimiter //
mysql> Create trigger trigger_before_delete_sample BEFORE DELETE on
Sample
    -> FOR EACH ROW
    -> BEGIN
    -> SET @count = if (@count IS NULL, 1, (@count+1));
    -> INSERT INTO sample_rowaffected values (@count);
    -> END ;
    -> //
Query OK, 0 rows affected (0.15 sec)
mysql> Delimiter ;

अब, निम्न क्वेरी तालिका 'नमूना' से कुछ मान हटा देगी और कई हटाई गई पंक्तियों की संख्या @count उपयोगकर्ता चर में संग्रहीत की जाएगी -

mysql> Delete from Sample WHERE ID >=500;
Query OK, 2 rows affected (0.11 sec)

mysql> Select @count;
+--------+
| @count |
+--------+
|      2 |
+--------+
1 row in set (0.03 sec)

निम्न क्वेरी की सहायता से, हम हटाए जाने से प्रभावित पंक्तियों के मान की जांच कर सकते हैं, जिसे निम्न प्रकार से नमूना_रो प्रभावित तालिका में डाला गया है -

mysql> Select Count(*) as 'Rows Affected' from sample_rowaffected;
+---------------+
| Rows Affected |
+---------------+
|             2 |
+---------------+
1 row in set (0.00 sec)

mysql> Select * from Sample;
+------+-----------+
| id   | value     |
+------+-----------+
| 100  | same      |
| 101  | Different |
+------+-----------+
2 rows in set (0.00 sec)

उपरोक्त उदाहरण की सहायता से, यह स्पष्ट है कि 'प्रत्येक पंक्ति के लिए' का अर्थ प्रत्येक मिलान वाली पंक्तियों के लिए है जो या तो अद्यतन या हटा दी जाती हैं।


  1. MySQL में खाली पंक्ति के लिए डिफ़ॉल्ट मान कैसे सेट करें?

    खाली पंक्ति के लिए डिफ़ॉल्ट मान सेट करने के लिए, COALESCE() की अवधारणा का उपयोग करें। आइए पहले एक टेबल बनाएं - टेबल बनाएं DemoTable1863 ( FirstName varchar(20) );क्वेरी ओके, 0 पंक्तियाँ प्रभावित (0.00 सेकंड) इंसर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें - DemoTable1863 मान (NULL) में डाले

  1. यह क्या है, इसके लिए क्या है और VoWiFi कॉलिंग सेवा कैसे काम करती है?

    हम जानते हैं कि फोन पर एक अच्छा सिग्नल एक इष्टतम कॉल की गारंटी देता है। हालांकि, अगर हम ऐसी जगह पर हैं जहां कवरेज कम है तो हमें VoWiFi. जैसी सेवा की आवश्यकता है। तो यह अपने आप से पूछने लायक है:VoWiFi कॉलिंग सेवा क्या है, यह किस लिए है और यह कैसे काम करती है? आगे हम आपको इंटरनेट नेटवर्क के माध्यम से

  1. इंटरनेट कैसे काम करता है?

    इंटरनेट हमारे दैनिक जीवन का एक बड़ा हिस्सा है और हम इसका लगातार उपयोग करते हैं। लेकिन यह वास्तव में कैसे काम करता है? हमने अभी freeCodeCamp.org YouTube चैनल पर एक कोर्स प्रकाशित किया है जो आपको सिखाएगा कि बुनियादी नेटवर्किंग सिद्धांतों के साथ इंटरनेट कैसे काम करता है। इयान फ्रॉस्ट इस कोर्स को पढ़