Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để ‘CHO TỪNG ROW’ hoạt động trong trình kích hoạt MySQL?


Trên thực tế, ‘CHO MỖI ROW’ có nghĩa là đối với mỗi hàng phù hợp được cập nhật hoặc bị xóa. Nói cách khác, chúng ta có thể nói rằng trình kích hoạt không được áp dụng cho mỗi hàng, nó chỉ cho biết thực thi phần thân trình kích hoạt cho mỗi hàng trong bảng bị ảnh hưởng. Chúng ta có thể minh họa điều này bằng ví dụ sau -

Ví dụ

Trong ví dụ này, chúng tôi đang tạo hai bảng, Sample và Sample_rowaffected, như sau -

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)

Bây giờ, chúng ta sẽ tạo một trình kích hoạt để kích hoạt trước khi xóa bất kỳ giá trị nào trong bảng 'Mẫu' như sau -

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 ;

Bây giờ, truy vấn sau sẽ xóa một số giá trị khỏi bảng 'Mẫu' và số lượng hàng đã xóa sẽ được lưu trữ trong biến người dùng @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)

Với sự trợ giúp của truy vấn sau, chúng ta có thể kiểm tra giá trị của các hàng bị ảnh hưởng bởi việc xóa, được chèn vào bảng sample_rowaffected như sau -

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)

Với sự trợ giúp của ví dụ trên, rõ ràng là 'CHO MỖI ROW' có nghĩa là đối với mỗi hàng phù hợp được cập nhật hoặc bị xóa.