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

MySQL ट्रिगर में 'FOR EACH ROW' कैसे काम करता है?


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

उदाहरण

इस उदाहरण में, हम दो टेबल Sample और Sample_rowaffected बना रहे हैं -

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)

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

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 ;

अब, निम्न क्वेरी टेबल 'Sample' से कुछ मान डिलीट करेगी और डिलीट की गई पंक्तियों की संख्या @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)

निम्न क्वेरी की मदद से, हम डिलीशन से प्रभावित पंक्तियों के मान की जांच कर सकते हैं, जो sample_rowaffected टेबल में डाली गई हैं -

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)

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


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

    COALESCE() फ़ंक्शन का उपयोग करके NULL मानों को क्वेरी परिणाम में डिफ़ॉल्ट मान से बदल सकते हैं। यह टेबल डेटा नहीं बदलता, केवल आउटपुट प्रभावित करता है। टेबल बनाएं mysql> CREATE TABLE DemoTable1863 (FirstName VARCHAR(20)); डेटा डालें mysql> INSERT INTO DemoTable1863 VALUES(Chris); mysql> INS

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

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

  1. - इंटरनेट कैसे काम करता है: नेटवर्किंग के लिए एक शुरुआती गाइड

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