Trigger ใน SQL Server เป็นกลไกที่ช่วยให้ฐานข้อมูลสามารถทำงานบางอย่างได้โดยอัตโนมัติ
เมื่อมีการเปลี่ยนแปลงข้อมูลในตาราง เช่น การเพิ่มข้อมูล (INSERT)
การแก้ไขข้อมูล (UPDATE) หรือการลบข้อมูล (DELETE)
โดย Trigger มักถูกใช้สำหรับบันทึกประวัติการเปลี่ยนแปลงข้อมูล (Audit Log)
หรือใช้ตรวจสอบเงื่อนไขก่อนหรือหลังการเปลี่ยนแปลงข้อมูล
โครงสร้างการสร้าง Trigger
CREATE TRIGGER trigger_name
ON table_name
AFTER INSERT, UPDATE, DELETE
AS
BEGIN -- คำสั่ง SQL ที่ต้องการให้ทำงาน
END
Trigger สามารถกำหนดให้ทำงานกับเหตุการณ์ได้หลายแบบ เช่น
INSERT, UPDATE หรือ DELETE พร้อมกัน
ตารางพิเศษที่ใช้ใน Trigger
ใน SQL Server จะมีตารางพิเศษที่ใช้ภายใน Trigger ได้แก่
- inserted เก็บข้อมูลใหม่ที่ถูกเพิ่มเข้ามาหรือข้อมูลใหม่หลังการแก้ไข
- deleted เก็บข้อมูลเดิมก่อนถูกลบหรือก่อนถูกแก้ไข
ตัวอย่างตารางข้อมูล
CREATE TABLE products (
id INT IDENTITY(1,1),
product_name VARCHAR(100),
price DECIMAL(10,2)
)
สร้างตารางสำหรับเก็บ Log
CREATE TABLE products_log (
id INT,
product_name VARCHAR(100),
price DECIMAL(10,2),
action_type VARCHAR(10),
action_date DATETIME
)
ตัวอย่าง Trigger สำหรับ INSERT, UPDATE และ DELETE
CREATE TRIGGER trg_products_audit
ON products
AFTER INSERT, UPDATE, DELETE
AS
BEGIN -- กรณี INSERT
IF EXISTS (SELECT * FROM inserted) AND NOT EXISTS (SELECT * FROM deleted)
BEGIN
INSERT INTO products_log
SELECT id, product_name, price, 'INSERT', GETDATE()
FROM inserted
END
-- กรณี UPDATE
IF EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
BEGIN
INSERT INTO products_log
SELECT id, product_name, price, 'UPDATE', GETDATE()
FROM inserted
END
-- กรณี DELETE
IF NOT EXISTS (SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
BEGIN
INSERT INTO products_log
SELECT id, product_name, price, 'DELETE', GETDATE()
FROM deleted
END
END
คำอธิบายการทำงาน
- INSERT จะอ่านข้อมูลจากตาราง inserted
- UPDATE จะมีข้อมูลทั้งใน inserted และ deleted
- DELETE จะอ่านข้อมูลจากตาราง deleted
ทดสอบการทำงานของ Trigger
INSERT INTO products(product_name, price)
VALUES ('Keyboard', 500)UPDATE products
SET price = 550
WHERE id = 1
DELETE FROM products
WHERE id = 1
เมื่อรันคำสั่งเหล่านี้ ข้อมูลจะถูกบันทึกลงในตาราง products_log
เพื่อเก็บประวัติการเปลี่ยนแปลงข้อมูล
สรุป
Trigger ใน SQL Server ช่วยให้ระบบสามารถทำงานอัตโนมัติเมื่อข้อมูลในตารางถูกเพิ่ม แก้ไข หรือถูกลบ
โดยมักใช้สำหรับบันทึก Log ตรวจสอบข้อมูล หรือควบคุมเงื่อนไขของระบบ
การใช้งาน Trigger อย่างเหมาะสมจะช่วยเพิ่มความปลอดภัยและความถูกต้องของข้อมูลในระบบฐานข้อมูล
