×

Làm thế nào để sử dụng TRIGGER trong MySQL?

Trong MySQL, TRIGGER là một khối lệnh SQL tự động được thực thi hoặc kích hoạt bởi các sự kiện cụ thể trong cơ sở dữ liệu, như khi thêm, cập nhật hoặc xóa bản ghi trong một bảng. Triggers có thể được sử dụng để tự động thực hiện các tác vụ như tính toán, duy trì toàn vẹn dữ liệu, hoặc cập nhật giá trị trong bảng khác khi dữ liệu trong một bảng thay đổi.

Tạo Trigger

Cú pháp cơ bản:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name FOR EACH ROW
BEGIN
    -- Các câu lệnh SQL để thực thi
END;
  • trigger_name là tên của trigger.
  • {BEFORE | AFTER} xác định trigger sẽ được thực thi trước hay sau sự kiện.
  • {INSERT | UPDATE | DELETE} xác định loại sự kiện kích hoạt trigger.
  • table_name là tên của bảng mà sự kiện sẽ kích hoạt trigger.
  • -- Các câu lệnh SQL để thực thi là phần thân của trigger, nơi bạn đặt các câu lệnh SQL mà bạn muốn thực thi khi trigger được kích hoạt.

Ví dụ

Ví dụ 1: Tạo một trigger để tự động cập nhật trường ngay_cap_nhat khi một bản ghi được cập nhật trong bảng nhan_vien.

CREATE TRIGGER before_nhan_vien_update
BEFORE UPDATE ON nhan_vien
FOR EACH ROW
BEGIN
    SET NEW.ngay_cap_nhat = NOW();
END;

Trong ví dụ này, BEFORE UPDATE nghĩa là trigger sẽ chạy trước khi một bản ghi được cập nhật. NEW.ngay_cap_nhat = NOW() sẽ cập nhật trường ngay_cap_nhat với thời gian hiện tại.

Ví dụ 2: Tạo một trigger để tự động thêm một bản ghi vào bảng lich_su_xoa khi một bản ghi trong bảng khach_hang bị xóa.

CREATE TRIGGER after_khach_hang_delete
AFTER DELETE ON khach_hang
FOR EACH ROW
BEGIN
    INSERT INTO lich_su_xoa(khach_hang_id, ngay_xoa) VALUES (OLD.id, NOW());
END;

Trong ví dụ này, AFTER DELETE nghĩa là trigger sẽ chạy sau khi một bản ghi trong khach_hang được xóa. OLD.id sử dụng giá trị id của bản ghi đã bị xóa, và một bản ghi mới được thêm vào lich_su_xoa với id và thời gian xóa.

Lưu ý khi sử dụng Trigger

  • Trigger có thể ảnh hưởng đến hiệu suất của cơ sở dữ liệu, đặc biệt khi có nhiều trigger hoặc trigger thực thi các câu lệnh phức tạp.
  • Cần phải cẩn thận để không tạo ra các vòng lặp vô tận giữa các trigger.
  • Đảm bảo rằng logic trong trigger không vi phạm toàn vẹn dữ liệu hoặc tạo ra dữ liệu không nhất quán.

Comments