Trigger rất hữu ích cho việc tự động hóa các task mang tính lặp đi lặp lại. 

Trigger được thực thi tự động khi xảy ra một sự kiện INSERT, UPDATE hoặc DELETE trên một bảng của CSDL. Trigger được chạy trên một hàng, nếu nhiều hàng dữ liệu được chèn hoặc xóa, mỗi hàng vẫn được thực hiện theo trigger được thiết lập. Trigger có thể được thiết lập trước hoặc sau hành động.

Cách để tạo một Trigger mới

Để tạo một trigger mới, hãy sử dụng lệnh CREATE TRIGGER. Lệnh này có cấu trúc như sau:

CREATE TRIGGER trigger_name

trigger_time 

trigger_event

ON table_name 

FOR EACH ROW

trigger_body

 

  • Từ khóa CREATE TRIGGER là bắt buộc, theo sau là tên của trigger mà chúng ta đặt. Nên đặt tên liên quan đến tác vụ muốn thực hiện, tên mỗi trigger là duy nhất, không được trùng trong một cơ sở dữ liệu.
  • trigger_time là một giá trị biến chỉ mang một trong hai giá trị BEFORE hoặc AFTER tùy theo bạn muốn trigger được thực thi trước hay sau.
  • trigger_event là một biến chỉ có các giá trị INSERT, UPDATE, hoặc DELETE. 
  • table_name là tên bảng mà trigger sẽ được thực thi trên đó. Tên bảng phải tồn tại trên database, nhưng bảng có thể trống.
  • FOR EACH ROW là một phần bắt buộc trong lúc định nghĩa trigger.
  • trigger_body là các truy vấn SQL mà bạn muốn chạy khi trigger được thực thi.

Để thử nghiệm một ví dụ trigger, chúng ta sẽ tạo một bảng users đơn giản.

CREATE TABLE

    users (

        fullname VARCHAR(120),

        email VARCHAR(120),

        username VARCHAR(30),

        password VARCHAR(60)

    );

Bây giờ chúng ta có thể tạo một trigger đơn giản và gắn nó vào bảng trống này. A trigger mã hóa một chuỗi mật khẩu trước khi được chèn bằng cách sử dụng hàm MD5.

CREATE TRIGGER password_hasher BEFORE INSERT ON users FOR EACH ROW

SET

    NEW.password = MD5 (NEW.password);

Từ khóa NEW cho bạn quyền truy cập đến data mới đang được khởi tạo, cho phép bạn tạo và sửa đổi theo ý muốn.

Bạn chỉ có thể sửa đổi nếu thiết lập event_timeBEFORE. Nếu event_time được set là AFTER, dữ liệu đã được lưu trữ trước khi thực hiện trigger, do đó nó không thể sửa đổi.  

Bạn có thể sử dụng từ khóa NEW trong sự kiện INSERTUPDATE , không thể sử dụng trong sự kiện DELETE.

Bên cạnh đó, trigger cũng có từ khóa OLD mà bạn có thể sử dụng trong sự kiện DELETEUPDATE, cung cấp cho bạn quyền truy cập đến các giá trị cũ của bản ghi bị ảnh hưởng. Bạn không thể sử dụng từ khóa này trong sự kiện INSERT vì không có bản ghi nào trước khi dữ liệu mới được tạo.

Để chạy thử trigger này, hãy chèn một hàng vào bảng users:

INSERT INTO

    users

VALUES

    (

        'idris babu',

        'zubs@test.com',

        'zubby1',

        'password'

    );

Kiểm tra dữ liệu đã nhập trên bảng, ta được như sau:

Password đã được hoàn toàn mã hóa

Cách để xóa Trigger

Để xóa trigger, hãy sử dụng lệnh DROP TRIGGER. Lệnh này chỉ yêu cầu tên trigger mà bạn đặt. Cú pháp như sau:

DROP TRIGGER password_hasher;

Chạy lệnh này sẽ xóa trigger mà ta đã tạo, Mọi bản ghi được chèn từ lúc này trở đi sẽ không có password được mã hóa.

Để test thử, chèn một bản ghi tương tự như trên và kiểm tra kết quả.

Bản ghi mới không có mật khẩu được mã hóa.

Lưu ý: nếu bạn xóa một trigger, tất cả các trigger có liên quan đều được tự động xóa theo.

Khi nào thì sử dụng Trigger

  • Ghi log: Bạn có thể tạo trigger để ghi vào một bảng khác lịch sử insert, update, hoặc delete bản ghi từ một bảng mà bạn thao tác.
  • Xác thực dữ liệu: Bạn có thể viết một trigger để đảm bảo dữ liệu là một loại nhất định và đặt có thể các giá trị chính xác khi cần.
  • Đồng bộ hóa dữ liệu: Bạn có thể sử dụng trigger để cập nhật dữ liệu của các bảng liên quan. Ví dụ, trong bảng ecommerce, mỗi lần bảng ghi được tạo, trigger có thể update số dư của nhà bán hàng. Hoặc nếu nhà bán hàng bị xóa, trigger sẽ xóa hết sản phẩm của họ.

Bài viết trên giúp bạn sẽ có thêm kiến thức về SQL triggers và khi nào cần sử dụng chúng. Hy vọng bạn sẽ viết nên những query tuyệt vời hơn.

Nguồn: www.freecodecamp.org

VietnamWorks inTECH