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

เราจะสร้างและใช้ทริกเกอร์ MySQL ได้อย่างไร


สำหรับการสร้างทริกเกอร์ใหม่ เราจำเป็นต้องใช้คำสั่ง CREATE TRIGGER ไวยากรณ์ของมันคือ −

CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name
FOR EACH ROW
BEGIN
...
END;

ที่นี่

  • Trigger_name เป็นชื่อของทริกเกอร์ที่ต้องวางไว้หลังคำสั่ง CREATE TRIGGER หลักการตั้งชื่อสำหรับ trigger_name อาจเหมือนกับ [trigger time]_[table name]_[trigger event] ตัวอย่างเช่น before_student_update หรือ after_student_insert สามารถเป็นชื่อของทริกเกอร์ได้
  • Trigger_time คือเวลาของการเปิดใช้งานทริกเกอร์และอาจเป็นก่อนหรือหลัง เราต้องระบุเวลาเปิดใช้งานในขณะที่กำหนดทริกเกอร์ เราต้องใช้ BEFORE หากเราต้องการดำเนินการก่อนการเปลี่ยนแปลงที่ทำในตาราง และ After หากเราต้องการประมวลผลโพสต์การดำเนินการไปยังการเปลี่ยนแปลงที่ทำในตาราง
  • Trigger_event สามารถ INSERT, UPDATE หรือ DELETE เหตุการณ์นี้ทำให้ทริกเกอร์ถูกเรียกใช้ ทริกเกอร์สามารถเรียกใช้โดยเหตุการณ์เดียวเท่านั้น ในการกำหนดทริกเกอร์ที่เรียกใช้โดยหลายเหตุการณ์ เราต้องกำหนดทริกเกอร์หลายรายการ หนึ่งทริกเกอร์สำหรับแต่ละเหตุการณ์
  • Table_name เป็นชื่อโต๊ะ ที่จริงแล้ว ทริกเกอร์จะเชื่อมโยงกับตารางเฉพาะเสมอ หากไม่มีตาราง ทริกเกอร์ก็จะไม่เกิดขึ้น เราจึงต้องระบุชื่อตารางหลังคีย์เวิร์ด "เปิด"
  • เริ่มต้น…END คือบล็อกที่เราจะกำหนดตรรกะของทริกเกอร์

ตัวอย่าง

สมมติว่าเราต้องการใช้ทริกเกอร์ในตาราง Student_age ซึ่งสร้างขึ้นดังนี้ -

mysql> Create table Student_age(age INT, Name Varchar(35));
Query OK, 0 rows affected (0.80 sec)

ในตอนนี้ ทริกเกอร์ต่อไปนี้จะแทรกอายุ =0 โดยอัตโนมัติ หากมีคนพยายามใส่อายุ <0

mysql> DELIMITER //
mysql> Create Trigger before_inser_studentage BEFORE INSERT ON student_age FOR EACH ROW
BEGIN
IF NEW.age < 0 THEN SET NEW.age = 0;
END IF;
END //
Query OK, 0 rows affected (0.30 sec)

ตอนนี้สำหรับการเรียกใช้ทริกเกอร์นี้ เราสามารถใช้คำสั่งต่อไปนี้ −

mysql> INSERT INTO Student_age(age, Name) values(30, 'Rahul');
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO Student_age(age, Name) values(-10, 'Harshit');
Query OK, 1 row affected (0.11 sec)

mysql> Select * from Student_age;
+------+---------+
| age  | Name    |
+------+---------+
| 30   | Rahul   |
| 0    | Harshit |
+------+---------+
2 rows in set (0.00 sec)

ชุดผลลัพธ์ด้านบนแสดงให้เห็นว่าเมื่อแทรกค่าลบในตารางจะทำให้ทริกเกอร์แทรก 0

ข้างต้นเป็นตัวอย่างของทริกเกอร์ที่มี trigger_event เนื่องจาก INSERT และ trigger_time มาก่อน