Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีสร้าง Trigger หลายตัวสำหรับ event และ timing เดียวกันใน MySQL 5.7.2+


MySQL 5.7.2+ รองรับหลาย trigger ต่อ event/timing เดียวกัน ทำงานตามลำดับ ตัวอย่างสร้าง 2 trigger BEFORE UPDATE บนตาราง Student_detail:

ตัวอย่าง

ข้อมูลตาราง Student_detail:

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

Trigger แรก studentdetail_before_update บันทึกการแก้ไข:

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)

ผลลัพธ์ 1 แถวใน student_detail_updated

Trigger ที่สอง studentdetail_before_update2 ใช้ FOLLOWS ทำงานหลัง trigger แรก:

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)

UPDATE อีกครั้ง:

mysql> Update Student_detail SET Address = 'Patiala' WHERE studentname = 'Mohan';
Query OK, 1 row affected (0.08 sec)

ตอนนี้ student_detail_updated มี 3 แถว: 1 จาก trigger แรก, 2 จาก trigger ที่สอง (ทำงานซ้อนกัน):

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)