আসলে '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' টেবিলে কোনো মান ডিলিট করার পূর্বে ট্রিগার করব যেন ডিলিট হওয়া সারির গুনটি @count ইউজার ভেরিয়েবলে সংরক্ষিত হয়:
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' মানে আপডেট বা ডিলিট হওয়া প্রতিটি মিলিত সারির জন্য।