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

Làm cách nào chúng ta có thể tạo nhiều trình kích hoạt MySQL cho cùng một sự kiện và thời gian hành động kích hoạt?


MySQL 5.7.2+ cho phép chúng tôi tạo nhiều trình kích hoạt cho cùng một sự kiện và thời gian hành động trong một bảng. Cả hai trình kích hoạt sẽ kích hoạt tuần tự khi sự kiện xảy ra. Nó có thể được hiểu với sự trợ giúp của một ví dụ -

Ví dụ

Trong ví dụ này, chúng tôi đang tạo nhiều trình kích hoạt cho cùng một sự kiện nói TRƯỚC KHI CẬP NHẬT. Tên của trình kích hoạt là ‘Studentdetail_before_update’ và ‘Studentdetail_before_update2’. Chúng sẽ kích hoạt tuần tự khi có sự kiện xảy ra. Chúng tôi đang tạo các trình kích hoạt này trên bảng ‘Student_detail’ có dữ liệu sau -

mysql> Select * from Student_detail;
+-----------+-------------+------------+
| Studentid | StudentName | address    |
+-----------+-------------+------------+
| 100       | Gaurav      | Delhi      |
| 101       | Raman       | Shimla     |
| 103       | Rahul       | Jaipur     |
| 104       | Ram         | Chandigarh |
| 105       | Mohan       | Chandigarh |
+-----------+-------------+------------+
5 rows in set (0.06 sec)

mysql> Delimiter //

Bây giờ với sự trợ giúp của truy vấn sau, chúng tôi sẽ tạo trình kích hoạt đầu tiên, sẽ được tạo bởi cùng một truy vấn như trước đó.

mysql> Create Trigger studentdetail_before_update
    -> BEFORE UPDATE
    -> ON Student_detail
    -> FOR EACH ROW
    -> BEGIN
    -> DECLARE AUSER Varchar(40);
    -> SELECT USER() into AUSER;
    ->INSERT INTO Student_detail_updated(studentid, Updated_date,Updated_by) values(OLD.studentid,NOW(),AUSER);
    -> END; //
Query OK, 0 rows affected (0.17 sec)

mysql> Update student_detail SET Address = 'Ludhiana' Where studentName = 'Ram';
Query OK, 1 row affected (0.15 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Sau khi gọi trình kích hoạt được tạo ở trên, chúng tôi nhận được kết quả sau -

mysql> Select * from student_detail_updated;
+-----------+---------------------+----------------+
| studentid | Updated_date        | Updated_by     |
+-----------+---------------------+----------------+
| 104       | 2017-11-22 16:17:16 | root@localhost |
+-----------+---------------------+----------------+
1 row in set (0.00 sec)

Bây giờ, trình kích hoạt thứ hai của cùng một sự kiện và thời gian hành động có thể được tạo như sau -

mysql> Create Trigger studentdetail_before_update2
    -> BEFORE UPDATE
    -> ON Student_detail
    -> FOR EACH ROW FOLLOWS studentdetail_before_update
    -> BEGIN
    -> DECLARE AUSER Varchar(40);
    -> SELECT USER() into AUSER;
    -> INSERT INTO Student_detail_updated(studentid, Updated_date,Updated_by) values(OLD.studentid,NOW(),AUSER);
    -> END; //
Query OK, 0 rows affected (0.15 sec)

Trình kích hoạt ở trên sẽ kích hoạt sau lần kích hoạt đầu tiên vì chúng tôi đang sử dụng từ khóa ‘THEO DÕI’.

mysql> Update Student_detail SET Address = 'Patiala' WHERE studentname = 'Mohan';
Query OK, 1 row affected (0.08 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Bây giờ, khi chúng tôi cập nhật giá trị, tập kết quả sau sẽ hiển thị hai hàng cho cùng một sự kiện và thời gian hành động. Hàng thứ hai đại diện cho giá trị sau trình kích hoạt studentdetail_before_update và hàng thứ ba đại diện cho giá trị sau trình kích hoạt studentdetail_before_update2.

mysql> Select * from student_detail_updated;
+-----------+---------------------+----------------+
| studentid | Updated_date        | Updated_by     |
+-----------+---------------------+----------------+
| 104       | 2017-11-22 16:17:16 | root@localhost |
| 105       | 2017-11-22 16:19:28 | root@localhost |
| 105       | 2017-11-22 16:19:28 | root@localhost |
+-----------+---------------------+----------------+
3 rows in set (0.00 sec)