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

mysql ट्रिगर हटाएं

मुझे लगता है कि यह FOR EACH ROW . के साथ एक भ्रम के कारण था स्टेटमेंट।
यह केवल "ट्रिगर लागू होने से पहले जारी किए गए स्टेटमेंट के मिलान वाले रिकॉर्ड के लिए है। "

अगर मौजूद है N तालिका में रिकॉर्ड की संख्या और where id=x . के रिकॉर्ड से मेल खाता है ,
मानते हुए x N . से कम के परिणाम का कारण बनता है रिकॉर्ड, कहें N-5 , फिर
FOR EACH ROW N-5 . के लिए एक लूप का कारण बनता है केवल बार।

अपडेट करें :
FOR EACH ROW के कारण प्रभावित पंक्तियों पर एक नमूना परीक्षण चलाया जाता है बयान नीचे दिखाया गया है।

mysql> -- create a test table
mysql> drop table if exists tbl; create table tbl ( i int, v varchar(10) );
Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.06 sec)

mysql> -- set test data
mysql> insert into tbl values(1,'one'),(2,'two' ),(3,'three'),(10,'ten'),(11,'eleven');
Query OK, 5 rows affected (0.02 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from tbl;
+------+--------+
| i    | v      |
+------+--------+
|    1 | one    |
|    2 | two    |
|    3 | three  |
|   10 | ten    |
|   11 | eleven |
+------+--------+
5 rows in set (0.02 sec)

mysql> select count(*) row_count from tbl;
+-----------+
| row_count |
+-----------+
|         5 |
+-----------+
1 row in set (0.00 sec)

mysql>
mysql> -- record loop count of trigger in a table
mysql> drop table if exists rows_affected; create table rows_affected( i int );
Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.05 sec)

mysql> select count(*) 'rows_affected' from rows_affected;
+---------------+
| rows_affected |
+---------------+
|             0 |
+---------------+
1 row in set (0.00 sec)

mysql>
mysql> set @cnt=0;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> -- drop trigger if exists trig_bef_del_on_tbl;
mysql> delimiter //
mysql> create trigger trig_bef_del_on_tbl before delete on tbl
    ->   for each row begin
    ->     set @cnt = if(@cnt is null, 1, (@cnt+1));
    ->
    ->     /* for cross checking save loop count */
    ->     insert into rows_affected values ( @cnt );
    ->   end;
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> delimiter ;
mysql>
mysql> -- now let us test the delete operation
mysql> delete from tbl where i like '%1%';
Query OK, 3 rows affected (0.02 sec)

mysql>
mysql> -- now let us see what the loop count was
mysql> select @cnt as 'cnt';
+------+
| cnt  |
+------+
| 3    |
+------+
1 row in set (0.00 sec)

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

mysql> select count(*) row_count from tbl;
+-----------+
| row_count |
+-----------+
|         2 |
+-----------+
1 row in set (0.00 sec)

mysql> select count(*) 'rows_affected' from rows_affected;
+---------------+
| rows_affected |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)

mysql>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. django मॉडल फ़ील्ड में वर्चर (एन) के बजाय चार (एन) डेटाटाइप को कैसे लागू करें?

  2. MySQL डेटाटाइम <-> जावा दिनांक

  3. MySQL डेटाबेस से यादृच्छिक प्रश्नों का चयन करना; सही जवाब गड़बड़

  4. घंटों के आधार पर समूहबद्ध करते समय समूह को 0 लौटना चाहिए। यह कैसे करना है?

  5. mysql डेटाबेस से रिकॉर्ड हटाने के लिए _GET url लिंक का उपयोग करना