Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để mỗi hàng hoạt động trong trình kích hoạt trong mysql?

FOR EACH ROW có nghĩa là cho mỗi hàng phù hợp được cập nhật hoặc đã xóa .

Nội dung trình kích hoạt sẽ không lặp lại toàn bộ dữ liệu bảng trừ khi có điều kiện where trong truy vấn.

Dưới đây là một ví dụ hoạt động:

Tạo bảng mẫu :

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)

Bảng mẫu để ghi lại số vòng lặp trong nội dung trình kích hoạt :

-- 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 |
+---------------+

Xác định một xóa kích hoạt :

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 ;

Bây giờ, hãy kiểm tra một xóa hoạt động :

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

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

Bây giờ, hãy kiểm tra hiệu ứng kích hoạt trên bảng chính :

-- 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. Làm cách nào để cắt bớt một bảng bằng Doctrine?

  2. Làm cách nào để kết nối Java với Mysql?

  3. Truy vấn MySQL cho giá sách của một lớp

  4. Tôi bối rối về các kết nối MySQL đồng thời

  5. Truy vấn MySQL - nhận các bản ghi bị thiếu khi sử dụng từng nhóm