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