สำหรับการสร้างทริกเกอร์ใหม่ เราจำเป็นต้องใช้คำสั่ง 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 มาก่อน