Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

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

FOR EACH ROW मतलब मिली हुई हर पंक्ति के लिए जो या तो अपडेट हो जाता है या हटाया गया .

ट्रिगर बॉडी पूरे टेबल डेटा के माध्यम से तब तक लूप नहीं करेगी जब तक कि क्वेरी में कोई स्थिति न हो।

एक कार्यशील उदाहरण नीचे दिखाया गया है:

नमूना तालिकाएं बनाएं :

drop table if exists tbl_so_q23374151; 
create table tbl_so_q23374151 ( i int, v varchar(10) );

-- set test data
insert into tbl_so_q23374151 
values (1,'one'),(2,'two' ),(3,'three'),(10,'ten'),(11,'eleven');

-- see current data in table**:  
select * from tbl_so_q23374151;
+------+--------+
| i    | v      |
+------+--------+
|    1 | one    |
|    2 | two    |
|    3 | three  |
|   10 | ten    |
|   11 | eleven |
+------+--------+
5 rows in set (0.00 sec)

ट्रिगर बॉडी में लूप काउंट रिकॉर्ड करने के लिए सैंपल टेबल :

-- let us record, loop count of trigger, in a table
drop table if exists tbl_so_q23374151_rows_affected; 
create table tbl_so_q23374151_rows_affected( i int );

select count(*) as rows_affected from tbl_so_q23374151_rows_affected;
+---------------+
| rows_affected |
+---------------+
|             0 |
+---------------+

एक हटाएं परिभाषित करें ट्रिगर :

drop trigger if exists trig_bef_del_on_tbl_so_q23374151;
delimiter //
create trigger trig_bef_del_on_tbl_so_q23374151 before delete on tbl_so_q23374151
  for each row begin
    set @cnt = if(@cnt is null, 1, (@cnt+1));

    /* for cross checking save loop count */
    insert into tbl_so_q23374151_rows_affected values ( @cnt );
  end;
//

delimiter ;

अब, एक हटाएं का परीक्षण करें ऑपरेशन :

delete from tbl_so_q23374151 where i like '%1%';

-- now let us see what the loop count was
select @cnt as 'cnt';
+------+
| cnt  |
+------+
|    3 |
+------+

अब, मुख्य तालिका पर ट्रिगर प्रभाव की जांच करें :

-- now let us see the table data
select * from tbl_so_q23374151;
+------+-------+
| i    | v     |
+------+-------+
|    2 | two   |
|    3 | three |
+------+-------+
2 rows in set (0.00 sec)

select count(*) as rows_affected from tbl_so_q23374151_rows_affected;
+---------------+
| rows_affected |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL 5.7 . के साथ नेटिव पासवर्ड का उपयोग कैसे करें

  2. MySQL TIMEDIFF () बनाम TIMESTAMPDIFF ():क्या अंतर है?

  3. MySql क्वेरी एनालाइज़र - मुफ़्त समाधान

  4. नोडज MySQL में कनेक्शन पूल में डेटाबेस स्विच करें

  5. mysql एकाधिक कॉलम में सरणी है