MySQL 5.7.2+ ช่วยให้เราสร้างทริกเกอร์ได้หลายรายการสำหรับเหตุการณ์และเวลาดำเนินการเดียวกันในตาราง ทริกเกอร์ทั้งสองจะเปิดใช้งานตามลำดับเมื่อมีเหตุการณ์เกิดขึ้น สามารถเข้าใจได้ด้วยความช่วยเหลือของตัวอย่าง -
ตัวอย่าง
ในตัวอย่างนี้ เรากำลังสร้างทริกเกอร์หลายตัวสำหรับเหตุการณ์เดียวกันโดยบอกว่าก่อนอัปเดต ชื่อของทริกเกอร์คือ 'Studentdetail_before_update' และ 'Studentdetail_before_update2' พวกเขาจะเปิดใช้งานตามลำดับเมื่อมีเหตุการณ์เกิดขึ้น เรากำลังสร้างทริกเกอร์เหล่านี้ในตาราง '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 //
ตอนนี้ด้วยความช่วยเหลือของข้อความค้นหาต่อไปนี้ เราจะสร้างทริกเกอร์แรก ซึ่งจะถูกสร้างขึ้นโดยข้อความค้นหาเดียวกันกับก่อนหน้านี้
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
หลังจากเรียกใช้ทริกเกอร์ที่สร้างไว้ข้างต้น เราก็ได้ผลลัพธ์ดังต่อไปนี้ −
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)
ตอนนี้ ทริกเกอร์ที่สองของเหตุการณ์และเวลาดำเนินการเดียวกันสามารถสร้างขึ้นได้ดังนี้ -
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)
ทริกเกอร์ด้านบนจะเปิดใช้งานหลังจากทริกเกอร์ครั้งแรกเนื่องจากเราใช้คีย์เวิร์ด 'ตาม'
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
ตอนนี้ เมื่อเราอัปเดตค่า ชุดผลลัพธ์ต่อไปนี้จะแสดงสองแถวสำหรับเหตุการณ์และเวลาดำเนินการเดียวกัน แถวที่สองแทนค่าหลังจากทริกเกอร์ studentdetail_before_update และแถวที่สามแทนค่าหลังจากทริกเกอร์ 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)