ภาพรวม
ใน MySQL สามารถสร้าง Trigger ที่ทำงานอัตโนมัติหลังจากคำสั่ง DELETE ถูกดำเนินการเสร็จสิ้น โดยใช้คีย์เวิร์ด AFTER DELETE ซึ่งเหมาะสำหรับการบันทึกประวัติ (Audit Log) หรือทำการกระทำตอบกลับเมื่อมีการลบข้อมูล
ไวยากรณ์พื้นฐาน
DELIMITER //
CREATE TRIGGER trigger_name
AFTER DELETE
ON table_name
FOR EACH ROW
BEGIN
-- คำสั่ง SQL ที่ต้องการให้ทำงาน
statement_1;
statement_2;
...
END; //
DELIMITER ;
ตัวอย่างการใช้งานจริง
1. สร้างตารางตัวอย่าง
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100)
);
2. เพิ่มข้อมูลทดสอบ
INSERT INTO DemoTable (FirstName) VALUES ('John');
INSERT INTO DemoTable (FirstName) VALUES ('Mike');
3. สร้าง Trigger สำหรับบันทึกผู้ใช้และเวลาที่ลบข้อมูล
DELIMITER //
CREATE TRIGGER history_of_Table
AFTER DELETE
ON DemoTable
FOR EACH ROW
BEGIN
SELECT USER() INTO @userName;
SELECT NOW() INTO @deleteDatetime;
END; //
DELIMITER ;
4. ทดสอบการทำงานของ Trigger
-- ลบแถวแรก
DELETE FROM DemoTable WHERE Id = 1;
-- ตรวจสอบค่าที่ Trigger บันทึกไว้
SELECT @userName;
SELECT @deleteDatetime;
5. ผลลัพธ์ที่คาดหวัง
+----------------+
| @userName |
+----------------+
| root@localhost |
+----------------+
+---------------------+
| @deleteDatetime |
+---------------------+
| 2019-07-09 21:06:31 |
+---------------------+
จุดสำคัญที่ต้องจำ
- Trigger จะทำงาน หลังจาก การลบข้อมูลสำเร็จแล้ว
- สามารถเข้าถึงค่าของแถวที่ถูกลบผ่าน
OLD.column_name - เหมาะสำหรับการสร้าง Audit Trail หรือ Sync ข้อมูลไปยังตารางอื่น
- ใช้
DELIMITERเพื่อกำหนดตัวคั่นคำสั่งชั่วคราว ขณะสร้าง Trigger