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

เราจะสร้างทริกเกอร์ MySQL หลายตัวสำหรับเหตุการณ์ทริกเกอร์และเวลาดำเนินการเดียวกันได้อย่างไร


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)